九.多进程

Posted hiss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了九.多进程相关的知识,希望对你有一定的参考价值。

多进程

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()

 

以上是关于九.多进程的主要内容,如果未能解决你的问题,请参考以下文章

九.多进程

九进程与线程

线程学习知识点总结

python接口自动化九--面对对象编程二,搭建测试环境,多线程与多进程

php多进程工作

多线程编程