温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python多进程--交互

发布时间:2020-06-28 14:17:04 来源:网络 阅读:318 作者:M_x_M 栏目:编程语言

1.管道使用

'''
管道Pipe
'''
from multiprocessing import Process,Pipe

def f(conn):
    conn.send('child message')#给主进程发送消息
    conn.close()
if __name__=='__main__':
    parent_conn,child_conn=Pipe()
    p=Process(target=f,args=(child_conn,))
    p.start()
    print(parent_conn.recv())#主进程接收子进程消息
    p.join()

2.Manage增强版pipe,可以接收字典,列表等

from multiprocessing import Process,Manager
import os

def f(d,l):#处理字典,列表函数
    d[1]='1'
    d['2']=2

    l.append(os.getpid())

if __name__=="__main__":
    manage_data=Manager()
    d=manage_data.dict()
    l=manage_data.list()

    p_list=[]
    for i in range(10):#建立10个进程并调用公共函数f
        p = Process(target=f, args=(d, l))
        p.start()
        p_list.append(p)

    for res in p_list:
        res.join()

    print(d)
    print(l)

>>:
{1: '1', '2': 2}
[2472, 7972, 9760, 5328, 5488, 12316, 6780, 12592, 6676, 6408]      

3.进程池与回调函数

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=2)#同时运行的进程数
    print("main process",os.getpid())
    for i in range(10):
        pool.apply_async(func=Foo,args=(i,),callback=Bar)

    pool.close()
    pool.join()

>>:
main process 15704
in process 15336
in process 14796
-->exec done: 100 15704
-->exec done: 101 15704
in process 14796
in process 15336
-->exec done: 103 15704
-->exec done: 102 15704
in process 14796
in process 15336
-->exec done: 104 15704
-->exec done: 105 15704
in process 15336
in process 14796
-->exec done: 107 15704
-->exec done: 106 15704
in process 15336
in process 14796
-->exec done: 109 15704
-->exec done: 108 15704
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI