问题
- 想使用多进程加速程序的处理,但是网上的很多入门例子都是只有一个参数的例子,很明显不符合要求
解决方案
- 看一下官方文档
- 上图中的参数为(fn, *args, **kwargs), args代表可以传入多个参数,**kargs代表可以传入字典作为参数,对于我个人来说,直接传入参数就可以了
例子
写好需要多进程运行的函数
def job(*x):
# 解包
pid, url = x
# to do something
将参数组装成list
item_list = []
for 循环
item_list.append((pid, url))
初始化ProcessPoolExecutor,并且执行map函数
executor = ProcessPoolExecutor(max_workers=12)
executor.map(job, item_list, chunksize=6)
总结
- map的用法不太符合常规思路,根据有些人的说法,如果在队列中的某一个项目出现了异常,可能会导致程序崩掉。
- 建议是用submit方法,然后配合as_completed方法使用,效果更佳!
- 多进程或者多线程使用的函数一定要进行异常捕获操作,不然一个异常导致程序终止可就尴尬了