【发布时间】:2020-09-24 23:15:48
【问题描述】:
我正在尝试使用 discord.py 创建 Discord 机器人。我遇到的一个问题是我想要运行一个异步函数,但是在指定的时间量(例如 5 秒)之后,如果它还没有返回,其余的代码应该恢复并且函数应该被取消(所以它不会在那之后继续运行)。不幸的是,虽然我可以让其余的代码运行,但之后该函数继续运行。
这是一个最小的可重现示例:
import asyncio
import discord
client = discord.Client()
async def testfunc():
await asyncio.sleep(10)
print("Still running.")
@client.event
async def on_ready():
print("Connected!")
await asyncio.wait([testfunc()],timeout=5,return_when=asyncio.FIRST_COMPLETED)
print("5 seconds up")
client.run('MY BOT ID')
我的意图是,在打印“已连接!” 5 秒后,它会打印“5 seconds up”(恢复其余代码),然后不打印“Still running”。 10 秒后。但是,当我实际尝试此操作时,两条消息都会被打印出来。
如何设置让 testfunc 在 5 秒后停止运行?
【问题讨论】:
标签: python discord.py python-asyncio