python Multiprocessing 多进程应用

在运维工作中,经常要处理大量数据,或者要跑一些时间比较长的任务,可能都需要用到多进程,不管是管理端下发任务,还是客户端执行任务,如果服务器配置还可以,跑多进程还是挺能解决问题的

Multiprocessing Pool

如果任务需要启动大量子进程,用一下multiprocessing Pool 是比较好的,类似如下用法

#!/usr/bin/env python
# coding:utf8
#author:shantuwqk@163.com

from multiprocessing import Pool import os,time,random def task_exec_time(name): print 'Run task %s(%s)....' %(name,os.getpid()) start = time.time() time.sleep(random.random()*3) end = time.time() print 'Task %s runs %0.2f seconds.' %(name,(end - start)) if __name__ == '__main__': print 'Parent process %s.' %os.getpid() p = Pool(8) for i in xrange(50): p.apply_async(task_exec_time,args=(i,)) print 'Waitting for all subprocesses done....' p.close() p.join() print 'All subprocess done...' 

multiprocessing Queue

启动进程后,如果需要进程间进行数据交换。用Queue,或pipes

#!/usr/bin/env python
# coding:utf8
#author:shantuwqk@163.com

from multiprocessing import Process,Queue import time,sys,random,os def task_write(q): for i in xrange(50): print 'Put %s to queue....' %i q.put(i) time.sleep(1) def task_read(q): while True: result = q.get(True) print 'Get %s from queue.' %result if __name__ == "__main__": #父进程创建Queue,并传给各个子进程: q = Queue() qw = Process(target=task_write,args=(q,)) qr = Process(target=task_read,args=(q,)) # 启动子进程pw,写入 qw.start() # 启动子进程pr,读取: qr.start() # 等待pw结束: qw.join() # pr进程里是死循环,无法等待其结束,只能强行终止: terminate qr.terminate() 

小结:

在Unix/Linux下,可以使用fork()调用实现多进程。

要实现跨平台的多进程,可以使用multiprocessing模块。

进程间通信是通过Queue、Pipes等实现的。

转载于:https://www.cnblogs.com/shantu/p/4598925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值