我有一个视图的Django项目。当我刷新页面时,我想调用一些非常复杂的函数,并且要花费相同的时间来执行。如何和什么是最好的方法来做它的背后呢?
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?
发布于 2022-04-18 19:56:28
也许您可以看看异步支持。异步
发布于 2022-11-02 15:06:16
使用asyncio,,您可以在后台并发运行多个 async 函数,并在Django视图中异步运行,如下所示。
# "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结果如下:
Test1
Test2
7
[03/Nov/2022 15:12:30] "GET /store/test/ HTTP/1.1" 200 1而且,使用线程,您还可以在Django视图中的背景并发中运行多个函数,如下所示。
# "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结果如下:
Test1
Test2
7
[03/Nov/2022 15:16:45] "GET /store/test/ HTTP/1.1" 200 1https://stackoverflow.com/questions/71914965
复制相似问题