>>进程同步
import multiprocessing
import time
def worke(dict,lock):
while True:
lock.acquire(timeout=5)
num = dict.get('ticket')
if num > 0:
num = num - 1
print('售票%s号窗口售出一张票,余票%s' % (multiprocessing.current_process().name, num))
time.sleep(1)
dict.update({'ticket': num})
else:
break
lock.release()
def main():
dict_ticket = {
'ticket': 10
}
lock = multiprocessing.Lock()
manager = multiprocessing.Manager()
mar_dict=manager.dict(dict_ticket)
job_procrss= [multiprocessing.Process(target=worke,args=(mar_dict,lock),name="-%s"% i) for i in range(1,5)]
for procrss in job_procrss:
procrss.start()
for procrss in job_procrss:
procrss.join()
if __name__ == '__main__':
main()
import multiprocessing
import time
def work(sem):
if sem.acquire():
print('%s号窗口开始进行业务处理' % (multiprocessing.current_process().name))
time.sleep(1)
sem.release()
def main():
sem=multiprocessing.Semaphore(3)
job_procrss = [multiprocessing.Process(target=work, args=(sem,), name="-%s" % i) for i in range(1,2)]
for procrss in job_procrss:
procrss.start()
for procrss in job_procrss:
procrss.join()
if __name__ == '__main__':
main()
'''
event 类常用方法
def is _set(self) 获取当前阻塞状态
def wait(self,timeout=None) 进入阻塞状态 将阻塞状态设置为False 等待阻塞标记为True 时进行解锁
def set(self) 解除阻塞 将阻塞标记设置为true
def clear(self) 清楚所有标记 将阻塞标记设置为False
'''
import multiprocessing
import time
def restaurant_handle(event):
print('服务员为食客安排座位,并等待为食客点餐')
time.sleep(1)
event.set()
event.clear()
event.wait()
print('厨师接到菜单,开始烹饪菜单')
event.set()
event.clear()
event.wait()
time.sleep(1)
def diner_handle(event):
event.wait()
print('食客看好自己的菜单,选好自己心仪的美食')
time.sleep(1)
event.set()
event.clear()
event.wait()
event.set()
event.clear()
print('顾客用餐')
def main():
event = multiprocessing.Event()
p1 = multiprocessing.Process(target=restaurant_handle,args=(event,))
p2 = multiprocessing.Process(target=diner_handle,args=(event,))
p1.start()
p2.start()
if __name__ == '__main__':
main()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现