async+队列queue.Queue()

Posted sunshinekimi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了async+队列queue.Queue()相关的知识,希望对你有一定的参考价值。

import queue
import time
import random
import threading
import asyncio
import   logging
logging.basicConfig(level = logging.INFO,format = %(asctime)s  - %(levelname)s -->%(funcName)s  at line %(lineno)d: 
 %(message)s)
log= logging.getLogger()
q_init = queue.Queue(maxsize=5)
async def jobs(item):
    time.sleep(random.randint(1,15))
    status = random.randint(0, 1)
    if status == 0:
        return ("success",item)
    else:
        return ("failed",item)

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

def ma(checker):
    new_loop = asyncio.new_event_loop()
    asyncio.set_event_loop(new_loop)
    loop = asyncio.get_event_loop()
    task = asyncio.ensure_future(do_work(checker))
    loop.run_until_complete(asyncio.wait([task]))
    st = task.result()
    print(st)
    return st

def worker_consumer(q_init):
    while True:
        if q_init.empty():
            logging.info("queue is empty stop current thread worker by break " )
            break
        checker = q_init.get()
        st=ma(checker)
        if st[0] in ["success", "failed"]:
            logging.info("%s task finished status is %s" % (st[1],st[0]))
            q_init.task_done()

def producer():
    item = 1
    while item:
        q_init.put(item)
        item += 1
        if item > 50:
            break


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

结果:

2019-12-17 12:39:37,845  - INFO -->worker_consumer  at line 40: 
 3 task finished status is failed
2019-12-17 12:39:38,844  - INFO -->worker_consumer  at line 40: 
 1 task finished status is failed
2019-12-17 12:39:39,858  - INFO -->worker_consumer  at line 40: 
 6 task finished status is success
2019-12-17 12:39:40,846  - INFO -->worker_consumer  at line 40: 
 4 task finished status is success
2019-12-17 12:39:40,854  - INFO -->worker_consumer  at line 40: 
 7 task finished status is success
2019-12-17 12:39:41,847  - INFO -->worker_consumer  at line 40: 
 5 task finished status is success
2019-12-17 12:39:42,865  - INFO -->worker_consumer  at line 40: 
 9 task finished status is success
2019-12-17 12:39:45,854  - INFO -->worker_consumer  at line 40: 
 11 task finished status is success
2019-12-17 12:39:49,861  - INFO -->worker_consumer  at line 40: 
 8 task finished status is failed
2019-12-17 12:39:49,868  - INFO -->worker_consumer  at line 40: 
 12 task finished status is failed
2019-12-17 12:39:50,847  - INFO -->worker_consumer  at line 40: 
 2 task finished status is success
2019-12-17 12:39:55,860  - INFO -->worker_consumer  at line 40: 
 10 task finished status is success
2019-12-17 12:39:57,856  - INFO -->worker_consumer  at line 40: 
 16 task finished status is failed
2019-12-17 12:39:59,861  - INFO -->worker_consumer  at line 40: 
 13 task finished status is failed
2019-12-17 12:40:02,867  - INFO -->worker_consumer  at line 40: 
 19 task finished status is failed
2019-12-17 12:40:02,874  - INFO -->worker_consumer  at line 40: 
 15 task finished status is failed
2019-12-17 12:40:03,876  - INFO -->worker_consumer  at line 40: 
 14 task finished status is success
2019-12-17 12:40:05,867  - INFO -->worker_consumer  at line 40: 
 17 task finished status is success
2019-12-17 12:40:07,873  - INFO -->worker_consumer  at line 40: 
 20 task finished status is success
2019-12-17 12:40:10,863  - INFO -->worker_consumer  at line 40: 
 18 task finished status is success
2019-12-17 12:40:11,875  - INFO -->worker_consumer  at line 40: 
 23 task finished status is failed
2019-12-17 12:40:12,886  - INFO -->worker_consumer  at line 40: 
 22 task finished status is success
2019-12-17 12:40:14,881  - INFO -->worker_consumer  at line 40: 
 26 task finished status is success
2019-12-17 12:40:16,890  - INFO -->worker_consumer  at line 40: 
 28 task finished status is success
2019-12-17 12:40:17,881  - INFO -->worker_consumer  at line 40: 
 21 task finished status is failed
2019-12-17 12:40:20,869  - INFO -->worker_consumer  at line 40: 
 25 task finished status is failed
2019-12-17 12:40:20,880  - INFO -->worker_consumer  at line 40: 
 24 task finished status is failed
2019-12-17 12:40:24,896  - INFO -->worker_consumer  at line 40: 
 27 task finished status is failed
2019-12-17 12:40:28,891  - INFO -->worker_consumer  at line 40: 
 29 task finished status is failed
2019-12-17 12:40:29,875  - INFO -->worker_consumer  at line 40: 
 31 task finished status is success
2019-12-17 12:40:31,884  - INFO -->worker_consumer  at line 40: 
 30 task finished status is failed
2019-12-17 12:40:31,897  - INFO -->worker_consumer  at line 40: 
 34 task finished status is success
2019-12-17 12:40:31,905  - INFO -->worker_consumer  at line 40: 
 33 task finished status is failed
2019-12-17 12:40:32,883  - INFO -->worker_consumer  at line 40: 
 32 task finished status is failed
2019-12-17 12:40:32,891  - INFO -->worker_consumer  at line 40: 
 36 task finished status is failed
2019-12-17 12:40:36,894  - INFO -->worker_consumer  at line 40: 
 39 task finished status is success
2019-12-17 12:40:38,880  - INFO -->worker_consumer  at line 40: 
 35 task finished status is failed
2019-12-17 12:40:38,911  - INFO -->worker_consumer  at line 40: 
 38 task finished status is success
2019-12-17 12:40:39,894  - INFO -->worker_consumer  at line 40: 
 40 task finished status is failed
2019-12-17 12:40:40,897  - INFO -->worker_consumer  at line 40: 
 41 task finished status is success
2019-12-17 12:40:44,902  - INFO -->worker_consumer  at line 40: 
 44 task finished status is success
2019-12-17 12:40:45,915  - INFO -->worker_consumer  at line 40: 
 46 task finished status is success
2019-12-17 12:40:46,886  - INFO -->worker_consumer  at line 40: 
 42 task finished status is failed
2019-12-17 12:40:46,901  - INFO -->worker_consumer  at line 40: 
 37 task finished status is success
2019-12-17 12:40:48,895  - INFO -->worker_consumer  at line 40: 
 48 task finished status is failed
2019-12-17 12:40:49,902  - INFO -->worker_consumer  at line 40: 
 45 task finished status is success
2019-12-17 12:40:49,902  - INFO -->worker_consumer  at line 35: 
 queue is empty stop current thread worker by break 
2019-12-17 12:40:50,922  - INFO -->worker_consumer  at line 40: 
 47 task finished status is success
2019-12-17 12:40:50,922  - INFO -->worker_consumer  at line 35: 
 queue is empty stop current thread worker by break 
2019-12-17 12:40:51,929  - INFO -->worker_consumer  at line 40: 
 43 task finished status is success
2019-12-17 12:40:51,930  - INFO -->worker_consumer  at line 35: 
 queue is empty stop current thread worker by break 
2019-12-17 12:40:52,900  - INFO -->worker_consumer  at line 40: 
 50 task finished status is failed
2019-12-17 12:40:52,900  - INFO -->worker_consumer  at line 35: 
 queue is empty stop current thread worker by break 
2019-12-17 12:40:59,905  - INFO -->worker_consumer  at line 40: 
 49 task finished status is success
2019-12-17 12:40:59,905  - INFO -->worker_consumer  at line 35: 
 queue is empty stop current thread worker by break 

Process finished with exit code 0

  

以上是关于async+队列queue.Queue()的主要内容,如果未能解决你的问题,请参考以下文章

GCD 全局并发队列并不总是并发(iOS 设备)?

dispatch_barrier_async

队列组用于多个网络请求

队列queue 代码

如何停止音频队列?

GCD的常用代码块