【发布时间】:2017-10-11 16:50:38
【问题描述】:
我想使用asyncio实现以下目标:
# Each iteration of this loop MUST last only 1 second
while True:
# Make an async request
sleep(1)
但是,我看到的唯一示例使用了一些变体
async def my_func():
loop = asyncio.get_event_loop()
await loop.run_in_executor(None, requests.get, 'http://www.google.com')
loop = asyncio.get_event_loop()
loop.run_until_complete(my_func())
但是run_until_complete 正在阻止!在我的while 循环的每次迭代中使用run_until_complete 会导致循环阻塞。
过去几个小时我一直在试图弄清楚如何正确运行非阻塞任务(使用async def 定义)但没有成功。我一定遗漏了一些明显的东西,因为像这样简单的东西肯定应该很简单。我怎样才能实现我所描述的?
【问题讨论】:
-
循环本身总是阻塞的。理想情况下,您希望将您的 while 放在循环运行的协程中,但如果没有更好地了解您的代码应该如何工作,很难说更多。
-
你好,我发现自己正处于这种情况,我想要的只是正常的同步执行...(在一个while循环内)...with在需要时调用异步方法的能力。我不在乎结果。你能做到吗???请,谢谢
-
在 JavaScript 中这很容易实现,可惜 Python 让它变得如此困难。
标签: python python-3.x python-requests python-asyncio