我有一个计数功能,它每秒向文本通道发送一个数字(它处于 while-true 循环中),在发生这种情况时,我希望机器人也能做其他事情,例如在不同的通道中回答命令但它卡在那个 while-true 循环中。
我试过使用回调函数,但它并没有让我发送任何消息..
这是我的完整代码:
@bot.event
async def on_ready():
text_channel = bot.get_channel(xxxxxxxxxxx)
await count_in_server(text_channel)
@bot.command()
async def ping(ctx):
await ctx.send('pong')
@bot.event
async def count_in_server(chat):
count = 0
while True:
await chat.send(count)
await asyncio.sleep(1)
count += 1
我更具体的问题是如何将 count_in_server()
作为线程运行? (请提供代码示例)
编辑:
感谢 AKX,我将 asyncio.sleep(1)
更改为 await asyncio.sleep(1)
,现在每秒钟之间它都会让另一个脚本运行,但我正在寻找另一种方法来做到这一点。
答案 0 :(得分:0)
await count_in_server(text_channel)
将上面的行替换为:
asyncio.create_task(count_in_server(text_channel))
你应该没问题。 任务被安排为并行运行。 “awaited”协程会阻塞“await”关键字所在的代码,直到目标解析为止。