我正在尝试创建一个不和谐机器人,我需要在另一个新线程中运行异步函数,因为主线程需要运行另一个函数(不和谐客户端)
我正在努力实现的目标:
# This methods needs to run in another thread
async def discord_async_method():
while True:
sleep(10)
print("Hello World")
... # Discord Async Logic
# This needs to run in the main thread
client.run(TOKEN)
thread = ""
try:
# This does not work, throws error "printHelloWorld Needs to be awaited"
thread = Thread(target=discord_async_method)
thread.start()
except (KeyboardInterrupt, SystemExit):
# Stop Thread when CTRL + C is pressed or when program is exited
thread.join()
我尝试过使用 asyncio 的其他解决方案,但无法让其他解决方案发挥作用。
跟进:当您创建一个线程时,当您停止程序(即键盘中断或系统退出)时,如何停止该线程?
任何帮助将不胜感激,谢谢!
您不需要涉及线程来在 asyncio 中并行运行两件事。只需在启动客户端之前将协程作为任务提交到事件循环即可。
请注意,您的协程不得运行阻塞调用,因此不要调用sleep()
你需要等待asyncio.sleep()
。 (这通常是协程的情况,而不仅仅是不和谐的协程。)
async def discord_async_method():
while True:
await asyncio.sleep(10)
print("Hello World")
... # Discord Async Logic
# run discord_async_method() in the "background"
asyncio.get_event_loop().create_task(discord_async_method())
client.run(TOKEN)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)