如何使 uWSGI 主线程不为 Django web 应用程序的请求提供服务?
How to make uWSGI main thread not serve requests for the Django web application?
在我的 Django 应用程序中,在 __init__.py
中,我有一个 class 启动事件循环。
class X:
def __init__(self):
self.__loop = asyncio.get_event_loop()
async def foo(self):
...
def do_stuff(self):
# some logic here
self.__loop.run_until_complete(foo())
在__init__.py
我刚好有
x = X()
在我的 Django 视图中,我这样做
from myapp import x
def example_view(request):
result = x.do_stuff()
return JsonResponse({"result": result})
但问题是,对于 uWSGI,如果服务请求的线程与初始化期间使用的线程相同,我会得到 Django 的 SynchronousOnlyOperation
异常,因为它检测到 运行ning 事件在该特定线程中循环。
所以我的问题是,有没有办法不使用该初始化线程来处理请求或使用其他替代方法来解决此问题?
uwSGI 配置为 运行 多进程和多线程,--enable-threads
这个怎么样:
class X:
async def foo(self):
...
def do_stuff(self):
asyncio.run(foo())
在我的 Django 应用程序中,在 __init__.py
中,我有一个 class 启动事件循环。
class X:
def __init__(self):
self.__loop = asyncio.get_event_loop()
async def foo(self):
...
def do_stuff(self):
# some logic here
self.__loop.run_until_complete(foo())
在__init__.py
我刚好有
x = X()
在我的 Django 视图中,我这样做
from myapp import x
def example_view(request):
result = x.do_stuff()
return JsonResponse({"result": result})
但问题是,对于 uWSGI,如果服务请求的线程与初始化期间使用的线程相同,我会得到 Django 的 SynchronousOnlyOperation
异常,因为它检测到 运行ning 事件在该特定线程中循环。
所以我的问题是,有没有办法不使用该初始化线程来处理请求或使用其他替代方法来解决此问题?
uwSGI 配置为 运行 多进程和多线程,--enable-threads
这个怎么样:
class X:
async def foo(self):
...
def do_stuff(self):
asyncio.run(foo())