Python多进程并发(multiprocessing)
来源:互联网 发布:拜占庭容错算法机制 编辑:程序博客网 时间:2024/04/27 04:56
由于Python设计的限制(我说的是咱们常用的CPython)。最多只能用满1个CPU核心。
Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。
1、新建单一进程
如果我们新建少量进程,可以如下:
import multiprocessingimport time def func(msg): for i in xrange(3): print msg time.sleep(1) if __name__ == "__main__": p = multiprocessing.Process(target=func, args=("hello", )) p.start() p.join() print "Sub-process done."
2、使用进程池
是的,你没有看错,不是线程池。它可以让你跑满多核CPU,而且使用方法非常简单。
注意要用apply_async,如果落下async,就变成阻塞版本了。
processes=4是最多并发进程数量。
import multiprocessingimport time def func(msg): for i in xrange(3): print msg time.sleep(1) if __name__ == "__main__": pool = multiprocessing.Pool(processes=4) for i in xrange(10): msg = "hello %d" %(i) pool.apply_async(func, (msg, )) pool.close() pool.join() print "Sub-process(es) done."
3、使用Pool,并需要关注结果
更多的时候,我们不仅需要多进程执行,还需要关注每个进程的执行结果,如下:
import multiprocessingimport timedef func(msg): for i in xrange(3): print msg time.sleep(1) return "done " + msgif __name__ == "__main__": pool = multiprocessing.Pool(processes=4) result = [] for i in xrange(10): msg = "hello %d" %(i) result.append(pool.apply_async(func, (msg, ))) pool.close() pool.join() for res in result: print res.get() print "Sub-process(es) done."
根据网友评论中的反馈,在Windows下运行有可能崩溃(开启了一大堆新窗口、进程),可以通过如下调用来解决:
附加知识:
python自2.6开始提供了多进程模块multiprocessing,这里主要是介绍multiprocessing下的Pool的几个函数
一 apply(func[, args[, kwds]])
for x in gen_list(l):
这个时候主进程的执行流程同单进程一致
二 apply_async(func[, args[, kwds[, callback]]])
for x in gen_list(l):
如果我们对返回结果不感兴趣, 那么可以在主进程中使用pool.close与pool.join来防止主进程退出。注意join方法一定要在close或terminate之后调用。
三 map(func, iterable[, chunksize])
四 map_async(func, iterable[, chunksize[, callback]])
五 imap(func, iterable[, chunksize])
六 imap_unordered(func, iterable[, chunksize])
七 close()
八 terminate()
九 join()
l = range(10)
def gen_list(l):
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- Python多进程并发(multiprocessing)
- 【转】python多进程并发(multiprocessing)
- python多进程并发之multiprocessing
- Python多进程multiprocessing
- Python 多进程(multiprocessing)
- python 多进程 multiprocessing
- Python多进程并发(multiprocessing)用法实例详解
- 31 Python 多进程-multiprocessing
- python multiprocessing多进程实例
- Codeforces Round #166 (Div. 2)---D. Good Substrings(字符串)
- uva 11995(stl)
- 类的概述和举例
- 织梦DedeCMS调用二级子栏目或者多级栏目解决方法
- 为什么新产品上市时要进行产品研究?
- Python多进程并发(multiprocessing)
- java反射
- java内存回收机制
- dojo 操作元素
- linux设备驱动第四篇:从如何定位oops的代码行谈驱动调试方法
- springMVC
- 有关集合队列和栈的转换
- FaceBook开源库Fresco
- 笔试题相关