[英]Run tasks asynchrounous with Python 3.6 asyncio
我開始研究一個新的Python 3.6項目,該項目與AWS Boto進行通信。 由於asyncio
EC2實例需要一些時間,因此我開始使用asyncio
庫,但是在理解它方面遇到了一些麻煩。
我想異步啟動2個EC2實例。 但是,如果我調用run_tests
,則會出現以下錯誤:
錯誤:asyncio:任務已銷毀,但未決!
目前這是我的代碼:
from manager import Manager
import asyncio
async def run_new_vm(manager, loop, vm_name):
new_instance = manager.launch_ec2_instance(vm_name)
task = loop.create_task(new_instance)
task.add_done_callback(lambda f: do_something(manager, f.result()))
def do_something(manager, instance):
// Do stuff once the instance is usable
async def one_service_per_vm(n, manager, loop):
for x in range (0, n):
print('Started with number %s.' % x)
loop.create_task(run_new_vm(manager, loop, n))
def run_tests():
loop = asyncio.get_event_loop()
m = Manager()
loop.run_until_complete(one_service_per_vm(2, m, loop))
loop.close()
我究竟做錯了什么?
您正在使用create_task
在循環上計划作業,但是沒有什么等待它們完成。 one_service_per_vm
將立即返回。
您可以使用asyncio.gather
await
許多任務
# ...
async def one_service_per_vm(n, manager, loop):
tasks = [run_new_vm(manager, loop, n) for x in range (0, n)]
await asyncio.gather(*tasks, loop=loop)
def run_tests():
loop = asyncio.get_event_loop()
m = Manager()
loop.run_until_complete(one_service_per_vm(2, m, loop))
loop.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.