Python-进程通信(队列实现)

我不是女神ヾ 2023-06-30 02:44 76阅读 0赞

进程通信


进程通信可以通过队列实现。先介绍一下Queue的简单使用。

  1. from queue import Queue,LifoQueue,PriorityQueue
  2. q = Queue(5)
  3. q.put('A')
  4. q.put('B')
  5. q.put('C')
  6. q.put('D')
  7. q.put('E')
  8. if q.full():
  9. print("队列已满!!!!")
  10. else:
  11. q.put('F',timeout=2) #如果队列满了,则只能等待;除非有“空地”才能添加成功。
  12. q.get()
  13. q.get()
  14. q.get()
  15. q.get()
  16. q.get()
  17. if q.empty():
  18. print('队列已空')
  19. else:
  20. q.get(timeout=2) # 如果队列为空,取元素会阻塞。

输出:

  1. 队列已满!!!!
  2. 队列已空

通过队列实现进程通信

用例:

  1. from multiprocessing import Process,Queue # Queue别导错了!
  2. from time import sleep
  3. def download(q):
  4. images = ['girl.jpg','boy.jpg','man.jpg']
  5. for image in images:
  6. print('正在下载:',image)
  7. sleep(0.5)
  8. q.put(image)
  9. def getfile(q):
  10. while True:
  11. try:
  12. file = q.get(timeout = 2)
  13. print('{} 保存成功!!!'.format(file))
  14. except:
  15. print('全部保存完毕!')
  16. break
  17. if __name__ == '__main__':
  18. q = Queue(5)
  19. p1 = Process(target=download,args=(q,))
  20. p2 = Process(target=getfile, args=(q,))
  21. p1.start()
  22. p2.start()
  23. p1.join()
  24. p2.join()

输出:

  1. 正在下载: girl.jpg
  2. 正在下载: boy.jpg
  3. girl.jpg 保存成功!!!
  4. 正在下载: man.jpg
  5. boy.jpg 保存成功!!!
  6. man.jpg 保存成功!!!
  7. 全部保存完毕!

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 进程通信之消息队列

    对于进程我们知道一个进程拥有独立的用户地址空间,在一个进程中的全局变量在另一个进程中是看不到的,那仫进程间是如何通信的呢?在进程与进程间的通信必须要经过内核,在内核中开辟一块缓