• 进程通信IPC机制


    一、进程间通信

     1 from multiprocessing import Queue
     2 
     3 q = Queue(5) # 括号内可以传参数,表示的是这个队列的最大存储数
     4 # 往队列中添加数据
     5 q.put(1)
     6 q.put(2)
     7 q.put(3)
     8 print((q.full())) #判断队列是否满了
     9 q.put(4)
    10 q.put(5)
    11 print(q.full())
    12 q.put(6) # 当队列满了之后 再放入数据 不会报错 会原地等待 直到队列中有数据被取走(阻塞态)
    13 
    14 print(q.get())
    15 print(q.get())
    16 print(q.get())
    17 print(q.empty()) #判断队列中的数据是否取完
    18 print(q.get())
    19 print(q.get())
    20 print(q.empty())
    21 print(q.get_nowait()) # 取值 没有值不等待直接报错
    22 print(q.get()) # 当队列中的数据取完之后 再次获取 程序会阻塞 直到有人往队列中放入值
    23 
    24 '''
    25 full
    26 get_nowait
    27 empty
    28 都不适用于多进程的情况
    29 '''

    二、进程间通信PCI机制

     1 from multiprocessing import Process,Queue
     2 
     3 def producer(q):
     4     q.put('hey guy')
     5 
     6 def cousumer(q):
     7     print(q.get())
     8 
     9 
    10 if __name__ == '__main__':
    11     q = Queue()
    12     p = Process(target=producer,args=(q,))
    13     c = Process(target=cousumer,args=(q,))
    14     p.start()
    15     c.start()

    三、生产者消费者模型

     1 from multiprocessing import Process,JoinableQueue
     2 import time
     3 import random
     4 
     5 def producer(name,food,q):
     6     for i in range(10):
     7         data = '%s制作了%s'%(name,food)
     8         time.sleep(random.random())
     9         q.put(data)
    10         print(data)
    11 
    12 def consumer(name,q):
    13     while True:
    14         data = q.get()
    15         if data == None:break
    16         print('%s吃了%s'%(name,data))
    17         time.sleep(random.random())
    18         q.task_done() #告诉队列你已经从队列中取出了一个数据 并且处理完毕了
    19 
    20 if __name__ == '__main__':
    21     q = JoinableQueue()
    22     p = Process(target=producer,args=('大厨egon','黄焖鸡米饭',q))
    23     p1 = Process(target=producer,args=('跟班tank','生蚝',q))
    24     c = Process(target=consumer,args=('吃货jerry',q))
    25     c1 = Process(target=consumer,args=('吃货jason',q))
    26     p.start()
    27     p1.start()
    28     c.daemon = True
    29     c1.daemon = True
    30     c.start()
    31     c1.start()
    32     p.join()
    33     p1.join()
    34 
    35     q.join() # 等待队列中数据全部取出
  • 相关阅读:
    java基础学习笔记四(异常)
    关于linux下crontab mysql备份出来的数据为0字节的问题
    转:国内优秀npm镜像推荐及使用
    webpack使用总结~
    php下载远程文件方法~
    腾讯开放平台web第三方登录获取信息类(包含签名)
    windows 平台 php_Imagick 拓展遇到的那些坑!
    转:CentOS/Debian/Ubuntu一键安装LAMP(Apache/MySQL/PHP)环境
    composer 报错:Your requirements could not be resolved to an installable set of packages 解决方法
    Javascript模块化编程(三):require.js的用法
  • 原文地址:https://www.cnblogs.com/spencerzhu/p/11340792.html
Copyright © 2020-2023  润新知