首页 > 系统服务 > 详细

九.多进程

时间:2018-02-25 21:27:20      阅读:414      评论:0      收藏:0      [点我收藏+]

多进程

import multiprocessing
import time

def run(name):
    time.sleep(2)
    print(hello,name)

if __name__ == __main__:
    for i in range(10):
        p = multiprocessing.Process(target=run,args=(man %s%i,))
        p.start()

 

进程间通讯

Queue

from multiprocessing import Process,Queue
import threading

def f(q):
    q.put([123,abc])

if __name__ == __main__:
    q = Queue()
    
    p = Process(target=f, args=(q,))
    p.start()
    print(q.get())   
    

 

Pipe

from multiprocessing import Process,Pipe

def a(message):
    message.send([123,"fghr"])
    message.close

if __name__ == "__main__":
    pointa,pointb=Pipe()

    p=Process(target=a,args=(pointa,))
    p.start()
    print(pointb.recv())

 

manage

以代理的方式在进程间共享字典或列表形式的数据

from multiprocessing import Process, Manager
import os
def f(d, l):
    d[os.getpid()] =os.getpid()
    l.append(os.getpid())
    print(l)

if __name__ == __main__:
    with Manager() as manager:
        d = manager.dict() #{} #生成一个字典,可在多个进程间共享和传递

        l = manager.list(range(5))#生成一个列表,可在多个进程间共享和传递
        p_list = []
        for i in range(10):
            p = Process(target=f, args=(d, l))
            p.start()
            p_list.append(p)
        for res in p_list: #等待结果
            res.join()

        print(d)
        print(l)

 

进程池

进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。

from  multiprocessing import Process, Pool
import time
import os

def Foo(i):
    time.sleep(2)
    print("in process",os.getpid())
    return i + 100

def Bar(arg):
    print(-->exec done:, arg,os.getpid())

if __name__ == __main__:
    pool = Pool(processes=3) #允许进程池同时放入5个进程
    print("主进程",os.getpid())
    for i in range(10):
        pool.apply_async(func=Foo, args=(i,), callback=Bar) #callback=回调
        #pool.apply(func=Foo, args=(i,)) #串行
        #pool.apply_async(func=Foo, args=(i,)) #并行
    print(end)
    pool.close()#这里join一定是在close之后,且必须要加join,否则主进程不等待创建的子进程执行完毕
    pool.join() #进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。.join()

 

九.多进程

原文:https://www.cnblogs.com/hiss/p/8470417.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!