1.事件:

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/17 10:38
# !@Author TrueNewBee # 事件:通过一个信号 来控制 多个进程 同时 执行或者阻塞
# 一个信号可以使所有的进程都进入阻塞状态
# 也可以控制所有进程的解除阻塞
# 一个事件被创建之后,默认是阻塞状态 # set 和 clear
# 分别用来修改一个事件的状态 True或者False
# is_set 用来查看一个事件的状态
# wait 是根据事件的状态来解决自己是否在wait处阻塞
# False阻塞 True不阻塞 # from multiprocessing import Event
#
#
# def event():
# e = Event() # 创建一个事件
# print(e.is_set()) # 查看一个事件的状态,默认设置成阻塞
# e.set() # 将这个事件的状态改为True
# print(e.is_set())
# e.wait() # 是依据e.is_set()的值来决定是否阻塞
# print(123456)
# e.clear() # 将这个事件的状态改为False
# print(e.is_set())
# e.wait() # 等待事件的信号被编程True
# print('*'*10)
#
#
# if __name__ == '__main__':
# event() # 红绿灯事件
# 用事件控制信号,控制进程
import time
import random
from multiprocessing import Process
from multiprocessing import Event def cars(e2, i1):
"""创建一个车"""
if not e2.is_set():
print("car%i1在等待" % i1)
e2.wait() # 阻塞,直到得到一个 事件状态变成True的信号
print("car%s通过" % i1) def light(e1):
"""灯是独立的进程"""
while True:
if e1.is_set():
time.sleep(2)
e1.clear()
print("绿灯亮了")
else:
e1.set()
print("红灯亮了")
time.sleep(2) if __name__ == '__main__':
e = Event()
traffic = Process(target=light, args=(e, ))
traffic.start()
for i in range(20):
car = Process(target=cars, args=(e, i))
car.start()
time.sleep(random.random())

2.队列

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/17 12:19
# !@Author TrueNewBee # import time
# from multiprocessing import Queue
#
#
# q = Queue(5)
# q.put(1) # 向队列里面放值
# q.put(2)
# q.put(3)
# q.put(4)
# q.put(5)
# # 如果队列满了再添加则出现堵塞
# print(q.full()) # 队列是否满了
# print(q.get()) # 取出来数
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# # 如果队列全取出了再去将出现阻塞
# print(q.empty()) # 判断队列是否为空
# while True:
# """检查队列是否为空"""
# try:
# q.get_nowait()
# except :
# print("队列已空")
# time.sleep(1) from multiprocessing import Process
from multiprocessing import Queue # 队列生产和消费数据
def produce(q1):
"""队列存储数据"""
q1.put('hello') def consume(q2):
"""队列消费数据"""
print(q2.get()) if __name__ == '__main__':
q = Queue()
p = Process(target=produce,args=(q, ))
p.start()
c = Process(target=consume, args=(q, ))
c.start()

3.生产者和消费者 joinableQueue模型:

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/17 15:04
# !@Author TrueNewBee # 队列
# 生产者消费者模型 解决供需不平衡的问题
import time
import random
from multiprocessing import Process, JoinableQueue def consumer(name, q1):
"""负责消费生产的东西"""
while True:
food = q1.get()
if food is None: # 判断为空则停止这个循环
print('%s获取到一个空' % name)
break
print('\033[31m%s消费了%s\033[0m' % (name, food))
time.sleep(random.randint(0, 2))
q1.task_done() # 提交回执 count - 1 def producer(name, food, q1):
"""负责生产包子"""
for i in range(10):
time.sleep(random.randint(0, 2))
f = '%s生产了%s%s' % (name, food, i)
print(f)
q1.put(f)
q1.join() # 阻塞,直到一个队列中的数据 全部被执行完毕 if __name__ == '__main__':
q = JoinableQueue(20)
p1 = Process(target=producer, args=('Egon', '包子', q))
p2 = Process(target=producer, args=('WuSir', '泔水', q))
c1 = Process(target=consumer, args=('jinBoss', q))
c2 = Process(target=consumer, args=('alex', q))
p1.start()
p2.start()
c1.daemon = True # 成为守护进程,主进程中的代码执行完毕之后,子进程自动结束
c2.daemon = True
c1.start()
c2.start()
p1.join() # 感知一个进程结束
p2.join() # 在消费者这一端
# 每次获取一个数据
# 处理一个数据
# 发送一个记号:标志一个数据被处理成功 # 在生产者这一端
# 每一次生产一个数据
# 且每一次生产的数据放在队列中
# 在队列中刻上一个记号
# 当生产者全部生产完毕后
# join信号: 已经停止生产数据了
# 且要等待之前被刻上的记号都被消费完
# 当数据都被处理完时,join阻塞结束 # consumer 中把所有的任务消耗完
# produce 端的join感知到,停止阻塞
# 所有的producer进程结束
# 主进程中的p.join结束
# 守护进程(消费者进程)结束

4. 生产者和消费者 Queue模型:

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/17 15:04
# !@Author TrueNewBee # 队列
# 生产者消费者模型 解决供需不平衡的问题
import time
import random
from multiprocessing import Queue, Process def consumer(name, q1):
"""负责消费生产的东西"""
while True:
food = q1.get()
if food is None: # 判断为空则停止这个循环
print('%s获取到一个空' % name)
break
print('\033[31m%s消费了%s\033[0m' % (name, food))
time.sleep(random.randint(0, 2)) def producer(name, food, q1):
"""负责生产包子"""
for i in range(10):
time.sleep(random.randint(0, 2))
f = '%s生产了%s%s' % (name, food, i)
print(f)
q1.put(f) if __name__ == '__main__':
q = Queue(20)
p1 = Process(target=producer, args=('Egon', '包子', q))
p2 = Process(target=producer, args=('WuSir', '泔水', q))
c1 = Process(target=consumer, args=('jinBoss', q))
c2 = Process(target=consumer, args=('alex', q))
p1.start()
p2.start()
c1.start()
c2.start()
p1.join() # 感知一个进程结束
p2.join()
q.put(None)
q.put(None)

7.17python的更多相关文章

  1. 19/03/17Python笔记

    一.判断元素是否为数字 ".isdigit() #判断123是不是数字,是的话输出True,不是输出False 二.标志位 需要死循环时,不一定用 while True 还可以用 while ...

  2. day 17python 面对对象之继承

    一:什么面向对象的继承? 比较官方的说法就是: 继承(英语:inheritance)是面向对象软件技术当中的一个概念.如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A ...

  3. 17-Python执行JS代码--PyExecJS、PyV8、Js2Py

    一.Python执行JS代码--PyExecJS.PyV8.Js2Py 1.1.PyExecJS PyExecJS的优点是您不需要照顾JavaScript环境.特别是,它可以在Windows环境中运行 ...

  4. 【Python高级工程师之路】入门+进阶+实战+爬虫+数据分析整套教程

    点击了解更多Python课程>>> 全网最新最全python高级工程师全套视频教程学完月薪平均2万 什么是Python? Python是一门面向对象的编程语言,它相对于其他语言,更加 ...

  5. 此贴告诉你:为啥shell脚本人,不建议学python

    py很强大,我承认.但在运维方面,py不但不强大,还有硬伤.正因为有下述硬伤,所以我们运维,还是用shell多,用py极少.我看到用shell的人很多,你建议人用python,人说py是很好,但下一秒 ...

  6. [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)

    [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...

  7. [Python] Tkinter command

    例1:创建按钮 import tkinter as tk class App: def __init__(self,root): frame = tk.Frame(root) frame.pack() ...

随机推荐

  1. IIS服务命令

    : iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现) iisreset /start或stop 启动(停止)所有Internet服务 iisreset /resta ...

  2. 独热编码和dummy编码的作用

    参考这篇文章: https://www.cnblogs.com/lianyingteng/p/7792693.html 总结:我们使用one-hot编码时,通常我们的模型不加bias项 或者 加上bi ...

  3. 细说firewalld和iptables

    在RHEL7里有几种防火墙共存:firewalld.iptables.ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等. fir ...

  4. javascript删除数组,索引出现问题解决办法。

    var data = [ { isRemove: 0, name: "项目1" }, { isRemove: 1, name: "项目2" }, { isRem ...

  5. 如何成为一名Top DevOps Engineer

    软件世界的战场 如果你对devops的概念不是很了解的话,没有关系,可以先跳到维基百科阅读一下DevOps条目.有了模模糊糊的概念之后, 我们先抛开所有市面上对于devops的各种夸大和炒作,首先来思 ...

  6. angularjs drag and drop

    angular-dragula Drag and drop so simple it hurts 480 live demo angular-drag-and-drop-lists Angular d ...

  7. 解决 Firefox 下载文件名乱码扩展 ReDisposition

    作者 muzuiget  发布 2013-03-13 19:23  标签 redisposition Firefox 下载文件名乱码问题由来已久,偶然一两次还可以手动改名,批量下载时简直要亲命,最终我 ...

  8. [转] Dangers of using dlsym() with RTLD_NEXT

    There are times when you want to wrap a library function in order to provide some additional functio ...

  9. 【Linux】使用w命令和uptime命令查看系统负载

    在Linux系统中查询系统CPU和内存的负载(使用率)时,我们通常习惯于使用top.atop或者ps,这篇文章将要给大家介绍如何使用w命令和uptime命令来查看系统的负载情况,对于uptime命令, ...

  10. OpenCV 学习笔记 05 人脸检测和识别 AttributeError: module 'cv2' has no attribute 'face'

    1 环境设置: win10 python 3.6.8 opencv 4.0.1 2 尝试的方法 在学习人脸识别中,遇到了没有 cv2 中没有 face 属性.在网上找了几个方法,均没有成功解决掉该问题 ...