Python 如何在while循环中使用Asyncio
每当输入产品id时,我的代码就会使用API创建订单。然后在定时间隔循环中检查订单是否成功创建。我肯定没有正确地使用asyncio,我希望有人能提供一些提示,或者asyncio是否是适合这项工作的工具 我在线查看了文档和示例,但发现很难理解,很可能是因为我还在学习如何编写代码(初学者程序员w/Python 3.7.1) 没有asyncio,它一次只能创建+检查一个订单。我希望代码能够同时和异步地为许多不同的订单创建+检查 当我尝试两个不同的产品ID进行测试时,它给出了以下结果,但没有完成这些功能Python 如何在while循环中使用Asyncio,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,每当输入产品id时,我的代码就会使用API创建订单。然后在定时间隔循环中检查订单是否成功创建。我肯定没有正确地使用asyncio,我希望有人能提供一些提示,或者asyncio是否是适合这项工作的工具 我在线查看了文档和示例,但发现很难理解,很可能是因为我还在学习如何编写代码(初学者程序员w/Python 3.7.1) 没有asyncio,它一次只能创建+检查一个订单。我希望代码能够同时和异步地为许多不同的订单创建+检查 当我尝试两个不同的产品ID进行测试时,它给出了以下结果,但没有完成这些功能
<coroutine object create_order at 0x7f657b4d6448>
>create_order('ID1234ABCD')
__main__:1: RuntimeWarning: coroutine 'create_order' was never awaited
<coroutine object create_order at 0x7f657b4d6748>
>创建订单('ID1234ABCD')
__main\uuuuu:1:运行时警告:从未等待协同程序“创建订单”
在异步代码中使用阻塞请求
库是不好的。您的程序将等待每个请求完成,同时不会执行任何操作。您可以使用
您不能仅仅调用async
函数并期望它被执行,它只会返回一个coroutine
对象。您必须通过asyncio.run()
将此协同程序添加到事件循环中,您在代码中是如何操作的:
>>> asyncio.run(create_order('ID1234ABCD'))
或者,如果要同时运行多个协程:
>>> asyncio.run(
asyncio.wait([
create_order('ID1234ABCD'),
create_order('ID1234ABCD')
])
)
另外,如果您想舒适地从REPL测试异步
函数,您可以使用它,它可以直接从REPL运行异步函数(仅适用于7.0以上的版本)
安装:
pip3 install ipython
运行:
现在您可以等待您的异步函数:
In [1]: await create_order('ID1234ABCD')
您肯定不想在异步代码中使用sync
请求
库,请改用aiohttp
。它甚至有几乎相同的API!
ipython
In [1]: await create_order('ID1234ABCD')