队列控制

queuemaxsize=5 

多线程并发执行任务:

import  queue
import time
import random
import threading
import asyncio
q_init=queue.Queue(maxsize=5)
loc=threading.Lock()
def  jobs():
    time.sleep(5)
    status = random.randint(0,1)
    if status==0:
        return "success"
    else:
        return "failed"

def do_work(item):
    print("do something %s,time start %s"% (item,time.asctime()))
    a=jobs()
    return a

def worker_consumer(i):
    while True:

        checker=q_init.get()
        if checker is None:
            print("get last item is %s"%checker)
            q_init.task_done()
            break
        # item=q_init.get()

        st=do_work(checker)

        if  st in ["success","failed"]:
            loc.acquire()
            print("task finished status is %s"% st)
            q_init.task_done()
            loc.release()
def producer():
    item=1
    while item:
        q_init.put(item)
        item +=1
        if item>50:
            q_init.put(None)
            break




if __name__ == '__main__':
    producer = threading.Thread(target=producer)
    consumer=[threading.Thread(target=worker_consumer,args=(i,)) for i in range(5)]
    pool=[]
    producer.start()
    for k in consumer:
        k.start()
        pool.append(k)
    for m in pool:
        m.join()
    q_init.join()

  

猜你喜欢

转载自www.cnblogs.com/SunshineKimi/p/12051132.html