我有一个django项目,带有一些视图 my_view
。
我的视图依次运行,但可能需要几秒钟才能完成。
我希望能够同时向此视图发送多个获取请求,并并行处理。
目前,它们只是顺序运行。
我该如何实现?
my_view
不必异步。
Docker文件看起来像:
FROM python:3.6
RUN apt-get update
&& apt-get install -y --no-install-recommends
postgresql-client
&& rm -rf /var/lib/apt/lists/*
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
停止使用runserver
进行本地开发!此命令仅适用于本地开发,并且不保证安全和同意。
为您的答案,要正确处理这些查询,您有几个选择:
使用具有足够数量的工人
的WSGI服务器如果此视图的执行时间不会超过X
次,则可以将工人号码设置为高于X
的任何内容(取决于您的需求),以确保应用程序的可访问性。
使用任何类型的任务队列卸载长期运行任务
通过将任务卸载到例如芹菜中,您可以立即释放工作人员。只需确保不要在一个请求中等待任务执行,而要提供某种方式检查任务的状态即可。
使用异步代码(在Django-channels的帮助下)进行长期运行的任务
如果您在此视图中有很多IO,则可以使其异步,因此工人在等待IO准备就绪时可以做其他事情。