7.17python
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的更多相关文章
- 19/03/17Python笔记
一.判断元素是否为数字 ".isdigit() #判断123是不是数字,是的话输出True,不是输出False 二.标志位 需要死循环时,不一定用 while True 还可以用 while ...
- day 17python 面对对象之继承
一:什么面向对象的继承? 比较官方的说法就是: 继承(英语:inheritance)是面向对象软件技术当中的一个概念.如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A ...
- 17-Python执行JS代码--PyExecJS、PyV8、Js2Py
一.Python执行JS代码--PyExecJS.PyV8.Js2Py 1.1.PyExecJS PyExecJS的优点是您不需要照顾JavaScript环境.特别是,它可以在Windows环境中运行 ...
- 【Python高级工程师之路】入门+进阶+实战+爬虫+数据分析整套教程
点击了解更多Python课程>>> 全网最新最全python高级工程师全套视频教程学完月薪平均2万 什么是Python? Python是一门面向对象的编程语言,它相对于其他语言,更加 ...
- 此贴告诉你:为啥shell脚本人,不建议学python
py很强大,我承认.但在运维方面,py不但不强大,还有硬伤.正因为有下述硬伤,所以我们运维,还是用shell多,用py极少.我看到用shell的人很多,你建议人用python,人说py是很好,但下一秒 ...
- [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)
[Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...
- [Python] Tkinter command
例1:创建按钮 import tkinter as tk class App: def __init__(self,root): frame = tk.Frame(root) frame.pack() ...
随机推荐
- oracle11g-linux 归档处理
在使用oracle时突然登录不上去了提示:ORA-00257:archiver error.Connect internal only,until freed. 查遍很多资料,都指向“归档日志空间不足 ...
- MDX Cookbook 11 - 计算 Year Over Year 增长 (同比计算) ParallelPeriod
这一小节主要介绍如何在一个平行期间的度量值,当前值的对比对象是指当前值的上一年,上一个季度或者其它时间级别上与当前值同一时间点上的的那个对象.有一个非常常见的需求就是对比上一年同一个时间点的某个值来判 ...
- 【BZOJ3585】mex
Description 有一个长度为n的数组{a1,a2,-,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. Input 第一行n,m. 第二行为n个数. 从第三行開始,每行一个询问l, ...
- 【PMP】项目、项目集、项目组合
项目:为创建独特的产品和服务成果而进行的临时性工作. 项目集:是一组相互关联且被协调管理的项目.子项目集和项目活动,以便获得分别管理所无法获得的利益. 项目组合:是指实现战略目标而组合在一起管理的项目 ...
- Microsoft/Git-Credential-Manager-for-Mac-and-Linux
纠正Mac上的错误: Fatal: java.lang.Error encountered. Details: unexpected errorfatal: credential helper '!/ ...
- xcode 编译或者打包的时候 找不到图片的错误
进入app路径,copy一份图片进去就好了
- 初始cfx开发webservice, 简单实例应用
项目结构图: 步骤一: 添加maven 依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- golang ----gc问题
go程序内存占用大的问题 这个问题在我们对后台服务进行压力测试时发现,我们模拟大量的用户请求访问后台服务,这时各服务模块能观察到明显的内存占用上升.但是当停止压测时,内存占用并未发生明显的下降.花了很 ...
- Java对象的内存实际占用
一.打包和使用方法参考我之前的这篇文章,本文主要是更新了测量的类及方法,实际测试这个方法更准确. https://www.cnblogs.com/yoyotl/p/8421287.html 二.新的测 ...
- 系统用户在Samba服务器中起一个别名
(1)通过/etc/samba/smbusers文件设置用户映射关系 如实列: # cat /etc/samba/smbusers # Unix_name = SMB_name1 SMB_name2 ...