Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django视图中调用耗时的方法而不使用任务队列_Python_Django - Fatal编程技术网

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特性,如多处理、多线程,感谢您的回答。这将解决我的要求:)不知道为什么有人否决了我的问题:(