Asyncio/Discord.py:使用循环发出任务。使用与wait相同的优先级/速度创建_task()

2024-09-29 21:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

在发出带有loop.create_task()await的任务时,似乎存在很大的时差。 在下面的示例discord bot中,在任何文本通道中键入"!q"几乎立即停止bot,在python控制台中键入"q"最多需要2分钟。我希望发出的任务以相同的速度执行,就像发出等待一样。我想知道,为什么会有这么大的时差。是否缺少优先级系统,或者是否有其他方法从线程发出异步任务

示例代码:

import discord, threading

class BotClient(discord.Client):
    async def halt(self):
        await self.close()
        print("[Discord Client stopped]")

    async def on_message(self, message):
        if message.content == "!q":
            await self.halt()

class InteractiveThread(threading.Thread):
    def __init__(self, client):
        super().__init__()
        self.client = client

    def run(self):
        cmd = input()
        if(cmd=="q"):
            self.client.loop.create_task(self.client.halt())

client = BotClient()

IAT = InteractiveThread(client)
IAT.start()

client.run(SECRET_DISCORD_TOKEN)
IAT.join()

(秘密不和谐令牌必须替换为您的令牌)


Tags: selfclientloop示例messagetask键入def

热门问题