如何启动线程并立即返回主代码?

时间:2020-01-19 16:27:41

标签: python django multithreading asynchronous

我有一个简单的视图和一个复杂的函数:

def addWord(request):

    def calculate():
        <code>

    form = WordCreationForm(request.POST or None)

    if form.is_valid():
        calculate()
        form.save()
        form = WordCreationForm()

    return render(request, 'add_word.html')

我需要calculate()才能独立运行。我不需要任何回调。我只想启动它,然后立即返回保存表单。所以,我这样做了:

import threading
def addWord(request):

    def calculate(num):
        <code>

    form = WordCreationForm(request.POST or None)

    if form.is_valid():
        threading.Thread(target=calculate, args=(request.POST['num'],)).start()
        form.save()
        form = WordCreationForm()

    return render(request, 'add_word.html')

但是在这种情况下,在完成calculate()之前,表单仍然不会保存并再次呈现。

那么,异步启动calculate()的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您的线程逻辑对我来说很合理,下面的示例说明了相同的行为:

import time
from threading import Thread

def printer(): 
    time.sleep(1) 
    print("printer")                                                                                                                                                                                          

 def main(): 
     Thread(target=printer).start() 
     print("finished") 

main()

它输出:

finished
printer

您如何确认直到之后才调用calculate?或那成功了(它可能在您不注意的情况下出现了异常)

相关问题