进程间的机制

1.模拟12306购票系统

  • 要同时开两个进程,一个进程查票,一个进程买票,都对一个文件操作
  • 这时有可能会发生数据混乱,所以添加锁机制
def check(i):
	with open('a')as f:
		s = f.read()
	print('\033[32m第%s人查到票,还有%s张\033[0m'%(i,s))

def buy(i,l):
	l.acquire()
	with open('a')as f:
		s = int(f.read())
	if s > 0:
		print('\033[33m第%s个人买到票了\033[0m'%i)
		s -= 1
	else:
		print('\033[34m第%s个人没买到票\033[0m'%(i))
	with open('a','w')as f:
		f.write(str(s))
	l.release()
if __name__ == '__main__':
	l = Lock()
	for i in range(10):
		p = Process(target=check,args=(i+1,))
		p.start()
	for i in range(10):
		p1 = Process(target=buy,args=(i+1,l))
		p1.start()

#输出结果
第2人查到票,还有6张
第1人查到票,还有6张
第3人查到票,还有6张
第9个人买到票了
第6个人买到票了
第3个人买到票了
第7个人买到票了
第4人查到票,还有2张
第6人查到票,还有2张
第8人查到票,还有2张
第9人查到票,还有2张
第5人查到票,还有2张
第2个人买到票了
第7人查到票,还有1张
第4个人买到票了
第8个人没买到票
第1个人没买到票
第10人查到票,还有0张
第10个人没买到票
第5个人没买到票

2.发廊小妹(正经发廊)

from multiprocessing import Process,Semaphore
import time
import random

def comin(i,sem):
    sem.acquire()
    print('\033[31m 第%s个人进去了\033[0m'%i)
    s = random.uniform(1,2)
    time.sleep(s)
    print('\033[32m 第%s个人出去了,持久力%.2fs秒\033[0m'%(i,s))
    sem.release()
if __name__ == '__main__':
    sem = Semaphore(5)
    for i in range(10):
        p = Process(target=comin,args=(i+1,sem))
        p.start()
#输出结果
 第1个人进去了
 第5个人进去了
 第3个人进去了
 第6个人进去了
 第4个人进去了
 第1个人出去了,持久力1.60s秒
 第2个人进去了
 第6个人出去了,持久力1.65s秒
 第8个人进去了
 第3个人出去了,持久力1.73s秒
 第10个人进去了
 第5个人出去了,持久力1.92s秒
 第7个人进去了
 第4个人出去了,持久力1.84s秒
 第9个人进去了
 第2个人出去了,持久力1.17s秒
 第8个人出去了,持久力1.18s秒
 第9个人出去了,持久力1.25s秒
 第7个人出去了,持久力1.65s秒
 第10个人出去了,持久力1.94s秒

3.模仿红绿灯


def sign_light(e):
	while 1:
		if e.is_set():
			print('\033[32m 绿灯亮了\033[0m')
			time.sleep(5)
			e.clear()
		else:
			print('\033[36m 红灯亮了 \033[0m')
			time.sleep(5)
			e.set()
def car(i,e):
	e.wait()
	print('第%s辆车过去了'%i)
if __name__ == '__main__':
	e = Event()
	p = Process(target=sign_light,args=(e,))
	p.start()
	for i in range(50):
		p1 = Process(target=car,args=(i+1,e))
		p1.start()
#输出结果
红灯亮了 
第1辆车过去了
第2辆车过去了
第8辆车过去了
第6辆车过去了
第9辆车过去了
第25辆车过去了
第3辆车过去了
第7辆车过去了
第5辆车过去了
第4辆车过去了
第42辆车过去了
第35辆车过去了
第23辆车过去了
第22辆车过去了
第46辆车过去了
第33辆车过去了
第24辆车过去了
第11辆车过去了
第14辆车过去了
第27辆车过去了
第10辆车过去了
第19辆车过去了
第12辆车过去了
第18辆车过去了
第32辆车过去了
第21辆车过去了
第17辆车过去了
第31辆车过去了
第34辆车过去了
第38辆车过去了
第40辆车过去了
第36辆车过去了
第43辆车过去了
第41辆车过去了
第49辆车过去了
第26辆车过去了
第16辆车过去了
第50辆车过去了
第37辆车过去了
第44辆车过去了
第30辆车过去了
第28辆车过去了
第20辆车过去了
第45辆车过去了
第29辆车过去了
第13辆车过去了
第39辆车过去了
第48辆车过去了
第15辆车过去了
第47辆车过去了
 绿灯亮了

猜你喜欢

转载自blog.csdn.net/hgdl_sanren/article/details/81911074