python由于有全局锁的原因,多线程无法调用多核CPU。所以在计算密集型的程序中使用多进程是比较合适的策略,而进程池可以很方便的构建程序进程管理。
apply_async使用示例
1 | import time |
CPU调用图:
要注意的点:
- pool = Pool(4) 默认
Pool()
会调用所有的CPU pool.apply_async
依次传入参数为 1 调用函数,2 参数(必须为元祖形式传入)i.get()
应该在进程结束后再使用 get 获得返回值x_y = list(zip(x,y))
如果函数参数不止一个,应该使用这样的方式把参数合并。
map_async使用示例
1 | import time |
要注意的点:
pool.map_async(task, x_y)
和 pool.apply_async 传入参数一致,但是不用循环,而是直接传入整体参数x_y
普通方式实现
1 | import time |