【发布时间】:2018-08-28 00:11:33
【问题描述】:
我想做什么:
- 有一个启动的异步事件循环
- 该循环被传递给我系统中的各个类,用于调度协程
- 该循环还用于处理对事件的响应(即,我有一个队列,一些事件处理代码将在该队列上放置一个项目,并在该队列上等待 get() 处理的单独协程这些值)
- 有一个主线程“拥有”循环并负责创建循环,并且在系统关闭时将取消循环上所有正在运行的任务并关闭和停止循环(干净关闭)
我的理解是因为#3,需要在循环中调用run_forever() 以确保任务在循环中被安排。但是如果我调用run_forever() 那么我的主线程会阻塞,永远不会终止。
我尝试过的:
产生一个线程,在循环中传递,然后在线程中调用run_forever。这意味着尽管我的单元测试永远不会完成。要点:
def __start_background_loop(loop):
def run_forever(loop):
loop.run_forever()
# because run_forever() will block the current thread, we spawn
# a subthread to issue that call in.
thread = Thread(target=run_forever, args=(loop,))
thread.start()
def __end_background_loop(loop):
for task in Task.all_tasks(loop):
task.cancel()
loop.stop()
【问题讨论】:
-
为什么不在另一个线程中创建事件循环呢?
asyncio.new_event_loop()
标签: python python-asyncio