python - 在 Python3.6 脚本中间使用 asyncio
问题描述
我有一个 Python 任务,它使用具有 1 个或多个与之关联的处理程序的状态更新程序报告它在执行过程中的进度。我希望以异步方式将更新分派给每个处理程序(每个处理程序负责对更新进行 I/O 绑定调用、推送到队列、记录到文件、调用 HTTP 端点等)。状态更新器有一个类似的方法,每个handler.dispatch
方法都是一个协程。这一直有效,直到添加了使用 aiohttp 的处理程序,现在我从 aiohttp 模块收到奇怪的错误。
def _dispatch(self, **updates):
event_loop = asyncio.get_event_loop()
tasks = (event_loop.create_task(handler.dispatch(**updates)) for handler in self._handlers)
event_loop.run_until_complete(asyncio.gather(*tasks))
我见过的每个 asyncio 示例基本上都有这种模式
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
我的问题是,在这种情况下我尝试使用 asyncio 模块的方式完全错误吗?事件循环是否需要创建一次且只创建一次,然后其他所有内容都通过它?
解决方案
推荐阅读
- javascript - React 中的状态突变 - 需要解释
- r - 带有数据表的数据栏
- flutter - 使用用户的实时位置颤动更新折线路线
- python - 猴子修补 PyCharm 函数
- pandas - 熊猫从系列中删除空格
- azure - 何时引发 EventGrid IoT 中心 DeviceConnected 和 DeviceDisconnected 事件
- c# - 传递函数的表单控件返回 Null
- android - 无法打开目录 Xamarin Forms
- python - 底部栏上的 Python Tkinter 窗口名称始终显示“Tk”
- accessibility - 带有 href 的标签未在选项卡上接收键盘焦点