多进程 多进程queue

多进程

import multiprocessing
import threading
import time

def thread_run():
    print(threading.get_ident())


def run(name):
    time.sleep(2)
    print('hello', name)
    t = threading.Thread(target=thread_run(),)#启动一个线程
    t.start()


if __name__ == '__main__':
    for i in range(10):
        p = multiprocessing.Process(target=run, args=('bob %s'%i,))#启动10个进程
        p.start()
        #p.join()

 

多进程queue

之前学习过一个queue,线程queue,为了在线程之间实现数据共享,但是出了线程,在进程之间数据就不能通过这个queue传递

现在了解一下多进程queue

import multiprocessing

def func(q):
    q.put([42,None,"hello"])#子进程在进程queue放了数据

if __name__ == '__main__':
    q = multiprocessing.Queue()#生成一个进程queue,q
    p = multiprocessing.Process(target=func,args=(q,))#创建一个进程p,把进程queue作为参数传递给进程p
    p.start()#启动进程
    print(q.get())#在父进程中显示子进程的数据

另一进程间数据传递的例子

import multiprocessing

def func(q):
    q.put([42,None,"hello"])#子进程p1在进程queue放了第一组数据
    q.put([43,None,"hello"])#子进程p1在进程queue放了第二组数据

def func2(q):
    print(q.get())#取出q中的数据

if __name__ == '__main__':
    q = multiprocessing.Queue()#生成一个进程queue,q
    p1 = multiprocessing.Process(target=func,args=(q,))#创建一个进程p1,执行func函数,并把进程queue作为参数传递给进程p
    p2 = multiprocessing.Process(target=func2,args=(q,))#创建一个进程p2,执行func2函数,并把进程queue作为参数传递给进程p
    p1.start()#启动进程p1
    p2.start()#启动进程p2
    print('--->',q.get())#在父进程中显示子进程的数据

例子中主进程和p2子进程都可以从q中获得,p1子进程存入的数据

D:\7_Python\Python37\python.exe D:/7_Python/S14/其他/aaaa.py
---> [42, None, 'hello']
[43, None, 'hello']                                                                                          
posted @ 2020-01-02 15:30  goldtree358  阅读(551)  评论(0)    收藏  举报