在Django视图中调用耗时的方法而不使用任务队列

时间:2019-01-18 09:54:17

标签: python django

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

是否有任何方法可以实现这种行为,而无需像芹菜等任何后台任务队列来调用long_task方法,因此我可以快速向用户发送响应?

我想将会有使用操作系统和python功能的方法。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Python> = 3.5,则可以尝试使用asyncio来运行后台任务:

_+_

可以找到更多信息https://rubygems.org/gems/jsql

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

答案 1 :(得分:0)

好吧,您可以直接在视图处理程序中直接调用一个函数。

如果这是Celery任务,则可以致电apply

long_task.apply(args=[key])