如何将异步函数传递给 Python 中的线程目标?

新手上路,请多包涵

我有以下代码:

 async some_callback(args):
    await some_function()

我需要将它作为目标提供给线程:

 _thread = threading.Thread(target=some_callback, args=("some text"))
_thread.start()

我得到的错误是“永远不会等待 some_callback ”。

有什么想法可以解决这个问题吗?

原文由 Damian-Teodor Beleș 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 420
2 个回答

您可以通过在执行异步之间添加函数来实现:

 async def some_callback(args):
    await some_function()

def between_callback(args):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)

    loop.run_until_complete(some_callback(args))
    loop.close()

_thread = threading.Thread(target=between_callback, args=("some text"))
_thread.start()

原文由 norbeq 发布,翻译遵循 CC BY-SA 4.0 许可协议

从 Python 3.7 开始,您可以使用 asyncio.run() 这比 loop.run_until_complete() 更直接一些:

 _thread = threading.Thread(target=asyncio.run, args=(some_callback("some text"),))
_thread.start()

原文由 mckbrd 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题