在Django视图中调用耗时的方法而不使用task queu

2024-04-26 12:36:21 发布

您现在位置:Python中文网/ 问答频道 /正文

每当django视图中有耗时的逻辑时,我就使用celery将其作为后台任务运行并返回响应。你知道吗

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'})

有没有办法实现这种行为调用长任务方法没有任何后台任务队列,如芹菜等,这样我可以快速发送响应给用户?你知道吗

我想应该有办法使用操作系统和python特性来做到这一点。你知道吗


Tags: djangokeyimport视图jsontaskrequestmy
2条回答

好吧,您可以直接在视图处理程序中调用函数。你知道吗

如果这是Celery任务,可以调用apply

long_task.apply(args=[key])

如果您使用的是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'})

更多信息可以找到here

如果您想在较低版本的Python(例如2.7)上使用asyncio,您应该能够做到这一点,但是请记住,标准核心库中没有包含asyncio,您需要安装它。你知道吗

相关问题 更多 >