首页 > 自动化运维 > python > Python多进程并发(multiprocessing)
2015
03-12

Python多进程并发(multiprocessing)

一、单一进程样例

#!/usr/bin/python
#coding: utf-8
#author zhaodong
#site www.tshare365.com
import multiprocessing
import time
 
def func(msg):
    for i in xrange(3):
        print msg 
        time.sleep(1)
 
if __name__ == "__main__":
    p = multiprocessing.Process(target=func, args=("hello tshare365", ))
    p.start()
    p.join()
    print "Sub-process done."

二、使用进程池

它可以让你跑满多核CPU,而且使用方法非常简单。注意要用apply_async,如果落下async,就变成阻塞版本了。

processes=4是最多并发进程数量

#!/usr/bin/python
#coding: utf-8
#author zhaodong
#site www.tshare365.com
import multiprocessing
import time
def func(msg):
    for i in xrange(3):
        print msg 
        time.sleep(1)
 
if __name__ == "__main__":
    pool = multiprocessing.Pool(processes=4)
#使用for循环生产info信息,然后将info信息传递给func函数中的msg
    for i in xrange(4):
        info = "hello %d" %(i)
        pool.apply_async(func, (info, ))  #此处的info就是传递给func函数中的msg
    pool.close()
    pool.join()
    print "Sub-process(es) done."

三、使用pool,并需要返回结果的情况

#!/usr/bin/python
#coding: utf-8
#author zhaodong
#site www.tshare365.com
import multiprocessing
import time
def func(msg):
    for i in xrange(3):
     #   print msg
        time.sleep(1)
    return "done " + msg 
 
if __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."

这个几个样例感觉不错,分享一下!

本博客至此介绍,如有疑问请留言!




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复