前景回顾

抢票系统的代码优化,使用了Lock类

from multiprocessing import Process,Lock
import os,time,json with open('user', 'w', encoding='utf-8')as f:
dic={'count':2}
json.dump(dic,f) def search():
with open('user','r',encoding='utf-8')as f:
data=json.load(f)
print(data.get('count')) def get():
with open('user','r',encoding='utf-8')as f:
data = json.load(f)
if data['count'] > 0:
data['count'] -= 1
with open('user','w',encoding='utf-8')as f:
json.dump(data,f)
print('success')
time.sleep(1)
else:
print('票已售空')
def piao(lock):
search()
lock.acquire()
get()
lock.release() if __name__ == '__main__':
lock=Lock()
for i in range(5):
p=Process(target=piao,args=(lock,))
p.start()

队列

1

from multiprocessing import Queue,Process

q=Queue()
q.put(1)
print(q)
data=q.get()
print(data)
data=q.get()
print(data) #默认会一直等待拿值
q.put(5)

2

from multiprocessing import Queue,Process

q=Queue(4)
q.put(1)
q.put(5)
q.put(5)
q.put(5)
q.put(5) #此处队列满了,就会成阻塞状态
q.get()
q.get()

3

from multiprocessing import Queue,Process

q=Queue(4)
q.put(1)
q.put(5)
q.put(5)
q.put(5)
q.put(5,block=True,timeout=3) #此处队列满了,就会成阻塞状态,block为等待状态,timeout为等待时间,等不到就报错
q.get()
q.get()

4

from multiprocessing import Queue,Process

q=Queue(4)
q.put(1)
q.get()
q.get(block=True,timeout=3) #队列已被取空,此时再取就会阻塞,block为阻塞状态,timeout为阻塞时间

5

from multiprocessing import Queue,Process

q=Queue(1)
q.put(1)
q.put_nowait(5) #队列已满,此时再存就会阻塞,相当于put的默认block为False

生产者消费者模型

版本一

from multiprocessing import Queue,Process
import time def produce(q,name,msg):
for i in range(3):
q.put(msg+str(i))
print(f'{name}生产了{msg+str(i)}')
time.sleep(1)
q.put(None) #用None来终止消费者 def cost(q,name):
while True:
msg=q.get()
if msg==None:
break
print(f'{name}吃了{msg}')
time.sleep(1) if __name__ == '__main__':
q=Queue()
p1=Process(target=produce,args=(q,'wind','card'))
p2=Process(target=produce,args=(q,'nick','niunai'))
# p1=Process(target=Process,args=(q,'wind','card'))
c1=Process(target=cost,args=(q,'chanyuli'))
c2=Process(target=cost,args=(q,'zhongshifu'))
p1.start()
p2.start()
c1.start()
c2.start()

版本二

from multiprocessing import Queue,Process,JoinableQueue
import time def produce(q,name,msg):
for i in range(3):
q.put(msg+str(i))
print(f'{name}生产了{msg+str(i)}')
time.sleep(1) def cost(q,name):
while True:
msg=q.get()
q.task_done()
if msg==None:
break
print(f'{name}吃了{msg}')
time.sleep(1) if __name__ == '__main__':
q=JoinableQueue()
p1=Process(target=produce,args=(q,'wind','card'))
p2=Process(target=produce,args=(q,'nick','niunai'))
# p1=Process(target=Process,args=(q,'wind','card'))
c1=Process(target=cost,args=(q,'chanyuli'))
c2=Process(target=cost,args=(q,'zhongshifu'))
c1.daemon=True
c2.daemon=True
p1.start()
p2.start()
c1.start()
c2.start()
p1.join()
p2.join()
q.join()

最新文章

  1. 在 Windows Phone 中,为 Grid 添加 Tilt 效果
  2. 关于UIView的方法animateWithDuration:animations:completion:的说明
  3. springmvc中的controller是单例的
  4. Sigmaplot激活码获取地址
  5. CSS垂直居中指南
  6. Android程序启动程序与页面的跳转
  7. 0x0A和0x0D
  8. jQuery 插件写法2
  9. Break和Continue的一些注意事项
  10. net析构函数对垃圾回收的影响
  11. 【转】android json解析及简单例子
  12. html5中的postMessage解决跨域问题
  13. 看望朋友(家达)--->>对事情的专注及时间效率学习
  14. [国嵌攻略][155][I2C用户态驱动设计]
  15. python笔记之序列
  16. C# 添加枚举中文资源
  17. 编辑器之神-vim的使用
  18. Windows操作系统分类
  19. Ubuntu16.04 ERROR 1698 (28000): Access denied for user 'root'@'localhost' 解决流程
  20. 对C++多态的一点理解

热门文章

  1. Java集合框架之接口Iterator
  2. highcharts柱状图、饼状图
  3. 统计网络time_wait连接状态及tcpip连接数
  4. koa 项目实战(二)连接 mongodb 数据库
  5. 开始JavaScript的学习了
  6. 微信小程序之阻止冒泡事件
  7. GitHub-Tech-DotNet:Cnblogs
  8. 机器学习之SVM算法
  9. flutter vscode 小插件
  10. C#连接内存数据库redis【1、Redis存读取数据】