提问人:Sander Bakker 提问时间:10/29/2023 最后编辑:Sander Bakker 更新时间:10/29/2023 访问量:34
不能从异步上下文调用它 - 使用线程或sync_to_async。Django ORM
You cannot call this from an async context - use a thread or sync_to_async. Django ORM
问:
我写了以下代码:
class BookmakerA:
def __init__(self) -> None:
self.bookmaker = None
async def _init(self):
self.bookmaker, _ = await Bookmaker.objects.aget_or_create(name="BookmakerA", defaults={"name": "BookmakerA"})
我从一个 Celery 任务调用这个类,如下所示:
@shared_task
def get_bookmaker_matches():
start = time.time()
bookmakera = BookmakerA()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(bookmakera._init())
但是,这会导致以下错误:
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
为什么会发生这种情况,我该如何解决。
即使我这样说:
await sync_to_async(Bookmaker.objects.get_or_create, thread_sensitive=True)(name="BookmakerA", defaults={"name": "BookmakerA"})
它会导致相同的错误
使用支持异步 ORM 的 Django 4.2.6(acreate_or_create、aget 等)
答: 暂无答案
评论