如何在celery中运行discord.py任务?

时间:2020-07-31 14:53:01

标签: python celery discord.py discord.py-rewrite celery-task

我试图创建一个芹菜任务,该任务从我的不和谐公会返回角色:(概念证明)

...
from asgiref.sync import async_to_sync
from celery import shared_task, Task
from discord.http import HTTPClient

class ChatTask(Task):
    _client = None

    @property
    def client(self) -> HTTPClient:
        if self._client is None:
            client = HTTPClient()
            result = async_to_sync(
                lambda: client.static_login(settings.BOT_TOKEN, bot=True)
            )()
            self._client = client
        return self._client


@shared_task(base=ChatTask, bind=True)
def get_roles(self):
    # Still testing!

    client: HTTPClient = self.client
    print(client)  # Seems to be fine: `<discord.http.HTTPClient object at 0x7fcc6728dbb0>`

    roles = async_to_sync(lambda: async_get_roles(client))()  # ERROR!: `RuntimeError('Event loop is closed')`
    print(roles)

    return roles

但是我不断得到RuntimeError('Event loop is closed')

评论:我确实知道celery v5将支持异步/等待。但是我不想等到年底发布。 ;)

如何解决此代码以消除错误并真正看到打印到控制台的角色?

0 个答案:

没有答案