我试图创建一个芹菜任务,该任务从我的不和谐公会返回角色:(概念证明)
...
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将支持异步/等待。但是我不想等到年底发布。 ;)
如何解决此代码以消除错误并真正看到打印到控制台的角色?