python3 asyncio 等待对象_Python asyncio,可以等待/产生整个myFunction()

我编写了一个对象库,其中很多都是HTTP / IO调用 . 由于不断增加的开销,我一直在考虑转移到asyncio,但我不想重写底层代码 .

我一直希望在我的代码中包含asyncio,以便异步执行函数,而不用await / yield替换所有深度/低级代码 .

我开始尝试以下方法:

async def my_function1(some_object, some_params):

#Lots of existing code which uses existing objects

#No await statements

return output_data

async def my_function2():

#Does more stuff

while True:

loop = asyncio.get_event_loop()

tasks = my_function(some_object, some_params), my_function2()

output_data = loop.run_until_complete(asyncio.gather(*tasks))

print(output_data)

我很快意识到,当这段代码运行时,没有任何实际异步发生,函数同步完成 . 我对异步编程很新,但我认为这是因为 neither of my functions are using the keyword await or yield 因此这些函数不是cooroutine,并且不会产生,因此不提供转移到不同cooroutine的机会 . 如果我错了,请纠正我 .

我的问题是,是否可以在asyncio await关键字中包装复杂的函数(在它们深入的内部进行HTTP / IO调用),例如

async def my_function():

print("Welcome to my function")

data = await bigSlowFunction()

UPDATE - Following Karlson's Answer

接下来,感谢Karlsons接受了回答,我使用了以下代码,它运行良好:

from concurrent.futures import ThreadPoolExecutor

import time

#Some vars

a_var_1 = 0

a_var_2 = 10

pool = ThreadPoolExecutor(3)

future = pool.submit(my_big_function, object, a_var_1, a_var_2)

while not future.done() :

print("Waiting for future...")

time.sleep(0.01)

print("Future done")

print(future.result())

这非常好用,并且future.done()/ sleep循环让您了解通过异步获得多少CPU周期 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值