我有一个python3.6程序,其中我使用了asyncio包事件循环。我的一个数据源来自一个api,它不是基于异步构建的。我的connection对象包含一个名为_connection的成员,它只是一个python套接字。现在,我可以在select语句中使用它来判断数据何时准备就绪。async def run(self): if select.select([self._q.我试过了,但它会通过等待,我猜这是有意义的,因为我说的是0字节。_q.receive
为了模仿这一点,我将使用以下代码:tasks = [asyncio.create_task(asyncio.sleep(i)) for i in range(10)]
如果我像这样使用异步聚集API:awaitasyncio.gather(*tasks),那么这个语句会阻塞事件循环,直到当前批处理中的所有任务完成为止。然而,问题是在我的程序中,我想使用一个ThreadPoolExecutor接口来执行那些任务,比如x数量的工人。这样可以更有效地执行任务(提前完成的任务将被另一个任务取代,而不是等待
# Do stuff here
asyncio.run(main())我原以为在超时之后,我等待的任何东西都会被清理干净(因为我自己没有保留任何引用)。然而,事实证明并非如此。使用,我可以推断每次调用asyncio.wait(...)时,都会创建一个新任务,该任务包含对stop_event.wait()返回的对象的引用,并且该任务将永远保持在周围。只有在调用stop_
format(int(time()))) loop = asyncio.get_event_loop如您所见,调试环境变量是在上面代码的第5行中设置的,但是,跟踪仍然非常没有帮助,如下所示:
3.4.3rc1 (v3.4.3rc1:69dd528ca625+, Feb 8 2015, 11:01:19\lib\asyncio\base_events.py", line 304, in ru
我正在使用Python3.4.2学习异步,我使用它在IPC总线上连续监听,而在DBus上闪烁。当我向运行底层代码的python进程发送SIGTERM时,脚本应该会优雅地终止。在等待yield from asyncio.sleep(0.1)时,信号处理程序捕获SIGTERM,并在此过程中调用task.cancel()。最后,调用loop.stop(),它停止循环,而不等待yield from asyncio.sleep(0.1)返回结果
(即使发送/等待异步)。(main()) 但是这会抛出一个错误(休眠从来没有被等待过;但是如果我等待它,我就会得到从非异步函数调用的等待错误)。\PythonSoftwareFoundation.Python.3.8_3.8.1520.0_x64__qbz5n2kfra8p0\lib\asyncio\runners.py", line 43,Program Files\WindowsApps\PythonSoftwareFoundation.