多进程

代码1  Queue   (消息)队列

利用put/get 进行添加和消耗

由于多get了1次 ,end无法打印出,主程序等待。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#   mail: infaaf@126.com
import  time
import os

from multiprocessing import Process,Queue,Manager


def f(q, i):
    q.put(i)


def f2():
    pass


if __name__ == '__main__':

    q = Queue()
    q.put('a')

    for i in range(3):
        p=Process(target=f,args=(q,i))
        p.start()


    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())
    print('end')

程序2 共享数据之 Manage

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#   mail: infaaf@126.com
import  time
import os

from multiprocessing import Process,Queue,Manager


def f(q, i):
    q.put(i)


def f2(d,d2,l,i):
    d['a']='aa'
    d['b']='bb'
    d2['222']=222   # 不报错,但是主程序d2={}
    l.append('11')


if __name__ == '__main__':

    with Manager() as manager:   # 以下,都要写在with段落后
        d=manager.dict()
        l=manager.list(range(2))  #先初始化2个,也可以不初始化
        d2={}

        p_list=[]

        for i in range(3):
            p=Process(target=f2,args=(d,d2,l,i))
            p.start()
            p_list.append(p)

        for p in p_list:
            p.join()

        print(d)
        print(l)
        print(d2)
        
        

结果

{'a': 'aa', 'b': 'bb'}
[0, 1, '11', '11', '11']
{}

Process finished with exit code 0

以上2个例子,子进程,都需要通过传递消息Q 或者M。

原文地址:https://www.cnblogs.com/infaaf/p/9291631.html