python asyncio REST api调用给出错误

时间:2018-08-03 14:26:49

标签: python multithreading python-multithreading python-asyncio

我正在尝试使用asyncio调用REST API异步,但是我一直收到我理解的错误“ coroutine was never awaited”。但是我想要这种行为,我希望我的函数仅通过发布而不是等待结果来结束。这是我的代码

async def callCoroutine:
    #call a REST API 

def lambda_handler(event, context):   
    loop = asyncio.get_event_loop()
    task = loop.create_task(callCoroutine(data))
    return

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

如果只需要调用API,而不必考虑结果,则可以在另一个线程中使用执行程序,这不会阻塞主线程。

要在执行程序中运行,请将AbstractEventLoop.run_in_executor()concurrent.futures中的执行程序一起使用。

答案 1 :(得分:1)

对于当前示例,您需要在某个地方运行循环(例如,如果您有一些Web服务器或辅助服务器-http://localhost:1234/laravel/myoctober/

具有运行循环的固定代码示例

loop.run_forever()

带有import asyncio async def callCoroutine(data): print('This is data: %s' % data) def lambda_handler(event, context): loop = asyncio.get_event_loop() task = loop.create_task(callCoroutine(context)) return lambda_handler(None, {'a': 1}) loop = asyncio.get_event_loop() loop.run_forever()

的示例
run_in_executor()

带有简单import asyncio import requests def call_rest_api(data): print('Triggered REST API in background') response = requests.get(data['url']) print('Response: %s' % response) async def main(loop): print('Some operations here...') data = {'url': 'http://example.com#some_rest_api'} loop.run_in_executor(None, call_rest_api, data) print('Continue work of main thread...') if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main(loop)) 的示例(如果您需要同步调用API)

但是如果要编写同步代码,则不必使用asyncio。

await

您能否提供更详细的示例说明您拥有什么以及想要实现什么?