Python 在django视图中调用耗时的方法而不使用任务队列
每当视图中有耗时的逻辑时,我就使用并返回响应作为后台任务运行它Python 在django视图中调用耗时的方法而不使用任务队列,python,django,Python,Django,每当视图中有耗时的逻辑时,我就使用并返回响应作为后台任务运行它 from my_app.task import long_task import json def my_view(request): body = request.body body = json.loads(body) key = body['key'] long_task.delay(key) # This will run in background return JsonRespo
from my_app.task import long_task
import json
def my_view(request):
body = request.body
body = json.loads(body)
key = body['key']
long_task.delay(key) # This will run in background
return JsonResponse({'message': 'request submitted'})
有没有办法实现这种行为,在没有芹菜等后台任务队列的情况下调用long_任务方法,这样我就可以快速向用户发送响应
我想使用操作系统和python功能是可以做到这一点的。如果您使用的是python>=3.5,您可以尝试asyncio来运行后台任务:
from my_app.task import long_task
import json
import asyncio
loop = asyncio.get_event_loop()
def my_view(request):
body = request.body
body = json.loads(body)
key = body['key']
arguments = [key]
loop.run_in_executor(None, long_task, arguments)
return JsonResponse({'message': 'request submitted'})
可以找到更多信息
如果您想在较低版本的Python(例如2.7)上使用asyncio,您应该能够做到这一点,但请记住,标准核心库中没有包含asyncio,您需要安装它。好的,您可以直接在视图处理程序中调用函数 如果这是一个
芹菜
任务,您可以调用apply
:
long_task.apply(args=[key])
我不明白你的问题。方法是用芹菜。这有什么问题?我不想使用芹菜或其他基于任务/作业队列的方法。我想用操作系统和python特性来实现这一点,我不知道这里的“操作系统和python特性”是什么。实现这一点的“python特性”是芹菜。操作系统和python特性,如多处理、多线程,感谢您的回答。这将解决我的要求:)不知道为什么有人否决了我的问题:(