Python并发编程-多进程进程锁
from multiprocessing import Process
import json
import time
from multiprocessing import Lock
def show(i):
with open('ticket') as f:
dic = json.load(f)#load直接打开文件, 不用read, loads操作字符串,需要read
print('余票: %s' % dic['ticket'])
def buy_ticket(i,lock):
lock.acquire() ##拿到钥匙进门,其他进程阻塞, acqurie和release之间的代码只能被一个进程执行
with open('ticket') as f:
dic = json.load(f)#load直接打开文件, 不用read, loads操作字符串,需要read
time.sleep(0.1)
if dic['ticket'] > 0 :
dic['ticket'] -=1
print('\033[32m%s买到票了\033[0m'%i) #console改为绿色
else:
print('\033[31m%s没有买到票了\033[0m'%i) #console改为红色
time.sleep(0.1)
with open('ticket', 'w') as f:
json.dump(dic,f) #修改json文件,减去被买去的票
lock.release() #释放钥匙
if __name__ == '__main__':
for i in range(10):
p = Process(target=show, args=(i,))
p.start()
lock = Lock() #产生钥匙
for i in range(10):
p = Process(target=buy_ticket, args=(i,lock))
p.start()
#没有进程锁是, 会出现多个用户都买到票的情况, 但是只有一张票
#进程锁
>>>
余票: 1
余票: 1
余票: 1
余票: 1
余票: 1
余票: 1
余票: 1
余票: 1
5买到票了
余票: 0
2没有买到票了
余票: 0
4没有买到票了
0没有买到票了
8没有买到票了
1没有买到票了
7没有买到票了
9没有买到票了
3没有买到票了
6没有买到票了
Python并发编程-多进程进程锁的更多相关文章
- python 并发编程 多进程 互斥锁 目录
python 并发编程 多进程 互斥锁 模拟抢票 互斥锁与join区别
- python 并发编程 多进程 互斥锁
运行多进程 每个子进程的内存空间是互相隔离的 进程之间数据不能共享的 一 互斥锁 但是进程之间都是运行在一个操作系统上,进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终 ...
- python 并发编程 多进程 互斥锁与join区别
互斥锁与join 互斥锁和join都可以把并发变成串行 以下代码是用join实现串行 from multiprocessing import Process import time import js ...
- python 并发编程 多进程 目录
python multiprocessing模块 介绍 python 开启进程两种方法 python 并发编程 查看进程的id pid与父进程id ppid python 并发编程 多进程 Proce ...
- python并发编程&多进程(二)
前导理论知识见:python并发编程&多进程(一) 一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_cou ...
- Python并发编程-多进程
Python并发编程-多进程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多进程相关概念 由于Python的GIL全局解释器锁存在,多线程未必是CPU密集型程序的好的选择. ...
- python并发编程之进程、线程、协程的调度原理(六)
进程.线程和协程的调度和运行原理总结. 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asynci ...
- python并发编程&多进程(一)
本篇理论居多,实际操作见: python并发编程&多进程(二) 一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行) ...
- python 并发编程 多进程 队列目录
python 并发编程 多进程 队列 python 并发编程 多进程 生产者消费者模型介绍 python 并发编程 多进程 生产者消费者模型总结 python 并发编程 多进程 JoinableQue ...
随机推荐
- libuv移植到ios
libuv官网只提供了os x的编译方法,没有IOS的.既然os x和ios的系统内核差不多,并且编译工具都是xcode,那我们只要重新指定cpu架构,就可以编译出ios版的了. 1.安装python ...
- proxy vue3.0
<html> <head> <meta charset="UTF-8" /> <meta name="viewport" ...
- 图论&动态规划:虚树
虚树可以看做是对树形动态规划的一种求解优化 对于需要求答案的点p,只保留对答案有影响的节点,从而减少时间 BZOJ2286 dp[i]=min(val[i],Σdp[j](j为i的儿子)),val[i ...
- 重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)
某个类做了过多的简单委托动作.让客户直接调用受托类. 动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处.但是这层封装也是要付出代价的,它的代价是:每当客户 ...
- Windows下的MySQL删除data文件夹后……
MySQL删除data文件夹后,怎么都无法启动了,出现错误: 150106 9:28:43 [Note] Plugin 'FEDERATED' is disabled. wampmysqld: Tab ...
- 一个ASP.NET中使用的MessageBox类
/// <summary> /// 自定义信息对话框 /// </summary> public class MessageBox { /// <summary> ...
- Array和String测试与java.String.split
java.string.split() 存在于java.lang包中,返回值是一个数组. 作用是按指定字符或者正则去切割某个字符串,结果以字符串数组形式返回. 例 String [] toSort = ...
- CALayer---iOS-Apple苹果官方文档翻译之CALayer
CHENYILONG Blog CALayer---iOS-Apple苹果官方文档翻译之CALayer CALayer /*技术博客http://www.cnblogs.com/ChenYilong/ ...
- 【洛谷P1104】生日
题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行,第1行为OI组总人数n:第2行至第n ...
- 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)
题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...