Python 进程间通信

程序1

#进程间通信
from multiprocessing import Queue

q = Queue(5)

q.put('A')
q.put('B')
q.put('C')
q.put('D')
q.put('E')
print(q.qsize())
if not q.full():
    q.put('F',timeout=3)      #put()如果queue满了,则只能等待,除非有‘空地’,则添加成功
else:
    print('队列已满')

结果1

5
队列已满

进程间的通信
程序2

#进程间通信
from multiprocessing import Queue

q = Queue(5)

q.put('A')
q.put('B')
q.put('C')
q.put('D')
q.put('E')
print(q.qsize())
if not q.full():    #判断队列是否满   q.empty() 判断的队列是否是空的
    q.put('F',timeout=3)      #put()如果queue满了,则只能等待,除非有‘空地’,则添加成功
else:
    print('队列已满')

#获取队列的值
print(q.get(timeout=2))
print(q.get(timeout=2))
print(q.get(timeout=2))
print(q.get(timeout=2))
print(q.get(timeout=2))
print(q.get(timeout=2))
print(q.get(timeout=2))

#q.put_nowait()
#q.pget_nowait()

结果2

5
队列已满
A
B
C
D
E
Traceback (most recent call last):
  File "D:/python/demo.py", line 23, in <module>
    print(q.get(timeout=2))
  File "C:\Users\123\AppData\Local\Programs\Python\Python37\lib\multiprocessing\queues.py", line 105, in get
    raise Empty
_queue.Empty

Process finished with exit code 1

程序3

#进程间通信
from multiprocessing import Process,Queue
from time import sleep

def download(q):
    images = ['girl.jpg','boy.jpg','man.jpg']
    for image in images:
        print('正在下载:',image)
        sleep(0.5)
        q.put(image)

def getfile(q):
    file = q.get()
    print('{}保存成功!'.format(file))

if __name__ == '__main__':
    q = Queue(5)
    p1 = Process(target=download,args=(q,))
    p2 = Process(target=getfile,args=(q,))

    p1.start()
    p2.start()

结果3

正在下载: girl.jpg
正在下载: boy.jpg
girl.jpg保存成功!
正在下载: man.jpg

程序4

#进程间通信
from multiprocessing import Process,Queue
from time import sleep

def download(q):
    images = ['girl.jpg','boy.jpg','man.jpg']
    for image in images:
        print('正在下载:',image)
        sleep(0.5)
        q.put(image)

def getfile(q):
    while True:
        try:
            file = q.get(timeout=5)
            print('{}保存成功!'.format(file))
        except:
            print('全部保存完毕')
            break

if __name__ == '__main__':
    q = Queue(5)
    p1 = Process(target=download,args=(q,))
    p2 = Process(target=getfile,args=(q,))

    p1.start()
    p1.join()

    p2.start()
    p2.join()

    print('0000000000000')      #主进程

结果4

正在下载: girl.jpg
正在下载: boy.jpg
正在下载: man.jpg
girl.jpg保存成功!
boy.jpg保存成功!
man.jpg保存成功!
全部保存完毕
0000000000000

Process finished with exit code 0

结果分析
通过args传递q对象
不加join()往里往一个取一个,加上join()指的是干完了之后再去取。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值