如何在discord.py中将异步函数作为线程运行?

时间:2021-05-31 11:18:40

标签: python discord.py

我有一个计数功能,它每秒向文本通道发送一个数字(它处于 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),现在每秒钟之间它都会让另一个脚本运行,但我正在寻找另一种方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

await count_in_server(text_channel)

将上面的行替换为:

asyncio.create_task(count_in_server(text_channel))

你应该没问题。 任务被安排为并行运行。 “awaited”协程会阻塞“await”关键字所在的代码,直到目标解析为止。