队列

(1)简单的队列:

import queue   #线程queue
q = queue.Queue()
q.put('a')
q.put('b')
q.put('c')
q.put('d')
q.put('e')
print(q.qsize( ))
print(q.get())
print(q.qsize( ))

 

 

(2)多个进程(主进程和子进程)之间相互传递数据,但是不共享数据:

from multiprocessing import Queue,Process
'''多个进程(主进程和子进程)相互传递数据,但是不共享数据'''
def f(qq):
    qq.put('你好')
if __name__ == '__main__':
    q = Queue()
    p = Process(target=f,args=(q,))    #起一个子进程
    p.start()
    print('>>',q.get())
    p.join()

 

 

(3)

管道的方式   多个进程(主进程和子进程)之间相互传递数据,但是不共享数据:
from multiprocessing import Process,Pipe #(Pipe() 管道)
def child(conn):
    conn.send('hello world!')
    conn.send('hello world too!')
    print('儿子收到父亲来电:',conn.recv())
    conn.close()
if __name__ == '__main__':
    father_conn,child_conn = Pipe()  #管道有两端,一端父亲一端儿子
    father_conn.send('儿砸')
    p = Process(target=child,args=(child_conn,))  #把儿子传给子进程,父亲是主进程
    p.start()
    print('父亲收到儿子来电:',father_conn.recv())
    print('父亲收到儿子来电:',father_conn.recv())

    p.join()

 


(4)多个进程(主进程和子进程)之间真正的数据共享:
from multiprocessing import Process,Manager
import os
def f(d,l):
    d[os.getpid()] = os.getpid()  #将进程号当作 key 和value传到字典里边
    l.append(os.getppid())
    print(l)
if __name__ == '__main__':
    with Manager() as manager:
        d  = manager.dict()            #生成一个字典,可在多个进程之间贡献
        l = manager.list(range(3))     #生成一个列表,事先存有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)

 

(5)进程锁 用法和线程锁基本一样:
from multiprocessing import Process,Lock
def f(l,i):
    l.acquire()
    print('hello world',i)
    l.release()
if __name__ == '__main__':
    l = Lock()   #进程锁需要将锁传进去
    for i in range(10):
        p = Process(target=f,args=(l,i,))
        p.start()

 



posted @ 2018-03-28 17:48  宋讼颂  阅读(160)  评论(0编辑  收藏  举报