Python并发编程之实战异步IO框架:asyncio 下篇(十一)
大家好,并发编程
进入第十一章。
前面两节,我们讲了协程中的单任务
和多任务
这节我们将通过一个小实战,来对这些内容进行巩固。
在实战中,将会用到以下知识点:
- 多线程的基本使用
- Queue消息队列的使用
- Redis的基本使用
- asyncio的使用
. 动态添加协程
在实战之前,我们要先了解下在asyncio中如何将协程态添加到事件循环中的。这是前提。
如何实现呢,有两种方法:
- 主线程是
同步
的
import time
import asyncio
from queue import Queue
from threading import Thread
def start_loop(loop):
# 一个在后台永远运行的事件循环
asyncio.set_event_loop(loop)
loop.run_forever()
def do_sleep(x, queue, msg=""):
time.sleep(x)
queue.put(msg)
queue = Queue()
new_loop = asyncio.new_event_loop()
# 定义一个线程,并传入一个事件循环对象
t = Thread(target=start_loop, args=(new_loop,))
t.start()
print(time.ctime())
# 动态添加两个协程
# 这种方法,在主线程是同步的
new_loop.call_soon_threadsafe(do_sleep, 6, queue, "个")
new_loop.call_soon_threadsafe(do_sleep, 3, queue, "第二个")
while True:
msg = queue.get()
print("{} 协程运行完..".format(msg))
print(time.ctime())
相关文章