异步遍历两个列表?



我有两个列表,lzma2_list和rar_list。两者都有随机数量的对象名称,每天都在变化。有一个目录存放这些对象,名为"O:",有两种方法可以处理这些数据。

bkp.zipto_rar(path,object_name)
bkp.zipto_lzma(path,object_name)

我怎么能得到所有项目从列表异步而不等待一个完成?

使用list异步和线程加速压缩我尝试使用这个问题的答案,但在我的情况下,方法接收2个参数,一个固定的,指的是目录,另一个将不断变化,指的是列表中的项目。


当你的函数接受参数时,你应该使用functools.partial将它们转换为不带参数的签名。

然后你可以使用asyncio.new_event_loop().run_in_executor来处理每个项目在后台线程如果函数是io绑定的,或者multiprocessing.Pool在后台处理项目进程

你甚至可以结合两种方法,并在每个后台进程中使用许多,但在不知道具体细节或函数和列表的情况下很难写出有用的例子。收集之后的结果可能也不是微不足道的。

import asyncio
import functools
lzma2_list = []
rar_list = []

def process_lzma2_list():
path = 'CONST'
for item in lzma2_list:
func = functools.partial(bkp.zipto_lzma, *(path, item))
asyncio.new_event_loop().run_in_executor(executor=None, func=func)

def process_rar_list():
path = 'CONST'
for item in rar_list:
func = functools.partial(bkp.zipto_rar, *(path, item))
asyncio.new_event_loop().run_in_executor(executor=None, func=func)

if __name__ == '__main__':
# it's ok to run these 2 functions sequentially as they just create tasks, actual processing is done in background
process_lzma2_list()
process_rar_list()

最新更新