我有一个在Python 3.5中实现的服务,应该定期通过网络加载文件 . 我想避免在加载时阻塞主线程 . 为了避免将线程和共享内存的复杂性引入我的应用程序,我想使用带有asyncio包的事件循环来检测它 .
为了运行一个事件循环,我找到了 AbstractEventLoop.run_forever()
和 AbstractEventLoop.run_until_complete(future)
方法,但两者似乎都在调用时阻塞了主线程 . 无论如何我使用线程的唯一方法是使用事件循环没有意义 .
所以我的问题是:是否可以在后台启动asyncio事件循环而不产生线程或进程?
2 回答
您可以使用
run_in_executor
方法 . 使用此方法运行的每个函数都在自己的线程中运行(并行) .例如:
希望这有用:)
如果你的整个程序在没有
asyncio
的事件循环的情况下运行,那么在新的事件循环中只运行一个任务并没有多大意义 . 相反,尝试使用复杂得多的concurrent.futures库 . 任何被调用的任务都会立即返回Future
实例,该实例具有.done()
和.result()
方法: