参考:https://blog.csdn.net/json_ligege/article/details/128084636
进程池使用举例
# -*- coding: UTF-8 -*-
from multiprocessing import Pool
def func_xx(num1, num2):
print("echo %d" % (num1 * num2))
if __name__ == '__main__':
p = Pool(processes=4)
for i in range(10):
p.apply_async(func=func_xx, args=(i, i, ))
p.close()
p.join()
Pool 类的几个方法:
- apply() 函数原型:apply(func[, args=()[, kwds={}]]) 该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞直到函数执行结束
- apply_async 函数原型:apply_async(func[, args=()[, kwds={}[, callback=None]]]) 与apply用法一致,但它是非阻塞的且支持结果返回后进行回调。
- map() 函数原型:map(func, iterable[, chunksize=None]) 与内置的map函数用法行为基本一致,它会使进程阻塞直到结果返回。 注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。
- map_async() 函数原型:map_async(func, iterable[, chunksize[, callback]]) 与map用法一致,但是它是非阻塞的。
- close() 关闭进程池(pool),使其不在接受新的任务。
- terminal() 结束工作进程,不在处理未处理的任务。
- join() 主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用。