异步 Django 的世界正在迅速变化,很难分辨什么是当前的、什么是过时的。
那么,当前使用 Django ORM(或者可能是另一个 ORM)获得最佳/最流畅异步功能的最佳方法是什么?人们今天成功地使用了什么?
有很多参考资料,包括:
我遇到的一个问题是,无论我尝试什么,我都会遇到“django.db.utils.OperationalError:数据库“test_djangoasyncproj”正在被其他用户访问”问题。
我认为你应该遵循文档 https://docs.djangoproject.com/en/4.0/topics/async/#asgiref.sync.sync_to_async https://docs.djangoproject.com/en/4.0/topics/async/#async-views
from asgiref.sync import sync_to_async
results = await sync_to_async(Blog.objects.get, thread_sensitive=True)(pk=123)
或
from asgiref.sync import sync_to_async
def _get_blog(pk):
return Blog.objects.select_related('author').get(pk=pk)
get_blog = sync_to_async(_get_blog, thread_sensitive=True)
如果您使用的是 Django >= 4.2
异步支持
Django 支持编写异步(“async”)视图,以及 如果您正在运行,则具有完全启用异步的请求堆栈 ASGI。异步视图仍然可以在 WSGI 下工作,但性能有所提高 处罚,并且没有能力进行高效的长期运行 请求。
async for author in Author.objects.filter(name__startswith="A"):
book = await author.books.afirst()
async def make_book(*args, **kwargs):
book = Book(...)
await book.asave(using="secondary")
async def make_book_with_tags(tags, *args, **kwargs):
book = await Book.objects.acreate(...)
await book.tags.aset(tags)