python Multiprocessing 多进程应用

在运维工做中,常常要处理大量数据,或者要跑一些时间比较长的任务,可能都须要用到多进程,无论是管理端下发任务,仍是客户端执行任务,若是服务器配置还能够,跑多进程仍是挺能解决问题的python

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,或pipesapp

#!/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()调用实现多进程。dom

要实现跨平台的多进程,能够使用multiprocessing模块。async

进程间通讯是经过Queue、Pipes等实现的。spa

相关文章
相关标签/搜索