有人能帮我弄清楚如何与程序的其余部分异步运行MethodTwo()吗?
代码如下:
import asyncio
from asgiref.sync import sync_to_async
def MethodTwo():
print("MethodTwo")
async def MethodOne():
print("MethodOne")
await sync_to_async(MethodTwo)()
async def Main():
print("Main")
await sync_to_async(MethodOne)()
loop = asyncio.get_event_loop()
loop.run_until_complete(Main())
loop.close()
谢谢你的帮助。
1条答案
按热度按时间6vl6ewon1#
使用
asyncio.to_thread()
方法(在Python3.10中添加的),这很容易。如果你想使用Python的早期版本,你可以使用ThreadPoolExecutor来实现同样的功能,它需要多几行代码,但工作方式是一样的。
函数
to_sleep
基本上是ThreadPoolExecutor周围的 Package 器。在asyncio程序的主线程中执行sync函数会阻塞事件循环。如果函数很快,这不是问题,在任何程序中都是很正常的。但是如果函数需要一段时间才能执行,那么其他任务将被停止。我想这就是你真正想问的。如果不使用辅助线程或进程,没有解决方案是不可能的。