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()