zoukankan      html  css  js  c++  java
  • 队列,生产者消费者模型

    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()
    好文要顶

  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/TMesh/p/11568097.html
Copyright © 2011-2022 走看看