Python 如何在while循环中使用Asyncio

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进行测试时,它给出了以下结果,但没有完成这些功能

每当输入产品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')