首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Django视图中运行后台函数

如何在Django视图中运行后台函数
EN

Stack Overflow用户
提问于 2022-04-18 17:20:59
回答 2查看 1.3K关注 0票数 2

我有一个视图的Django项目。当我刷新页面时,我想调用一些非常复杂的函数,并且要花费相同的时间来执行。如何和什么是最好的方法来做它的背后呢?

代码语言:javascript
复制
import time
import psycopg2
from django.http import HttpResponse

def long_time_function(sec):
    time.sleep(sec)
    print('DONE')

def index(request):
   
    long_time_function(100)

    return HttpResponse('INDEX page')

有一些内置的解决方案可以这样做,或者我需要使用线程或多处理来运行这个函数,并设置Deamon = True?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-18 19:56:28

也许您可以看看异步支持。异步

票数 1
EN

Stack Overflow用户

发布于 2022-11-02 15:06:16

使用asyncio,,您可以在后台并发运行多个 async 函数,并在Django视图中异步运行,如下所示。

代码语言:javascript
复制
# "store/views.py"

import asyncio
from django.http import HttpResponse

async def test1(num):
    print("Test1")
    return num + 1

async def test2(num):
    print("Test2")
    return num + 1

async def test(request):
    result1, result2 = await asyncio.gather(test1(2), test2(3))
    total = result1 + result2
    print(total) # 7
    return HttpResponse(total) # Return 7

结果如下:

代码语言:javascript
复制
Test1
Test2
7
[03/Nov/2022 15:12:30] "GET /store/test/ HTTP/1.1" 200 1

而且,使用线程,您还可以在Django视图中的背景并发中运行多个函数,如下所示。

代码语言:javascript
复制
# "store/views.py"

from threading import Thread
from django.http import HttpResponse

def test1(num, r):
    print("Test1") 
    r[0] = num + 1

def test2(num, r):
    print("Test2")
    r[0] = num + 1

def call_tests_view(request):
    result1 = [None] # Here
    result2 = [None] # Here
    thread1 = Thread(target=test1, args=(2, result1), daemon=True)
    thread2 = Thread(target=test2, args=(3, result2), daemon=True)
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    total = result1[0] + result2[0]
    print(total) # 7
    return HttpResponse(total) # Return 7

结果如下:

代码语言:javascript
复制
Test1
Test2
7
[03/Nov/2022 15:16:45] "GET /store/test/ HTTP/1.1" 200 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71914965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档