python ProcessPoolExecutor传入多个参数的问题

问题

  • 想使用多进程加速程序的处理,但是网上的很多入门例子都是只有一个参数的例子,很明显不符合要求

解决方案

  1. 看一下官方文档
    在这里插入图片描述
  • 上图中的参数为(fn, *args, **kwargs), args代表可以传入多个参数,**kargs代表可以传入字典作为参数,对于我个人来说,直接传入参数就可以了

例子

这是个trick的办法,将多个参数组成一个tuple,然后传给函数就行了,然后函数内部自己在解包赋值就行了

def job(x):
    image = None
    pid, url = x
	# to do something


item_list = []
for 循环
	item_list.append((pid, url))
	
executor = ProcessPoolExecutor(max_workers=12)
executor.map(job, item_list, chunksize=6)

def job(*x):
	# 解包
    pid, url = x
	# to do something
	

# 将要处理的东西组成一个list,list中每一个条目都是job函数需要的参数
item_list = []
for 循环
	item_list.append((pid, url))

# 出事化ProcessPoolExecutor,并且执行map函数
executor = ProcessPoolExecutor(max_workers=12)
executor.map(job, item_list, chunksize=6)

总结

  1. map的用法不太符合常规思路,根据有些人的说法,如果在队列中的某一个项目出现了异常,可能会导致程序崩掉。
  2. 建议是用submit方法,然后配合as_completed方法使用,效果更佳!
  3. 多进程或者多线程使用的函数一定要进行异常捕获操作,不然一个异常导致程序终止可就尴尬了
发布了227 篇原创文章 · 获赞 13 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_36149892/article/details/105152574
今日推荐