Ich habe eine Funktion in meinem Django views.py, die so aussieht.Threading in Django funktioniert nicht in der Produktion
def process(request):
form = ProcessForm(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.requested_by = request.user
instance.save()
t = threading.Thread(target=utils.background_match, args=(instance,), kwargs={})
t.setDaemon(True)
t.start()
return HttpResponseRedirect(reverse('mart:processing'))
Hier Ich versuche, eine Funktion ‚background_match‘ zu nennen in einem separaten Thread, wenn Prozessformular vorgelegt. Da dieser Thread einige Zeit in Anspruch nimmt, leite ich den Benutzer auf eine andere Seite namens "mart: processing" um.
Das Problem, mit dem ich konfrontiert bin, ist, dass alles in meinem lokalen Computer funktioniert, aber nicht auf Produktionsserver, der eine AWS EC2-Instanz ist. Der Thread startet überhaupt nicht. Innerhalb der Funktion background_match gibt es eine for-Schleife, die sich nicht vorwärts bewegt.
Wenn ich jedoch die Seite 'mart: processing' aktualisiere (STRG + R), verschiebt es sich um 1 oder 2 Iterationen. Für eine vollständige Schleife, die aus 1000 Iterationen besteht, muss ich also die Seite 1000 Mal aktualisieren. Wenn ich nach etwa 100 Iterationen die Seite nicht aktualisiere, bleibt sie an diesem Punkt stecken und bewegt sich nicht zur 101. Iteration. Bitte helfen Sie!
Verwenden Sie in der Produktion uwsgi und runserver vor Ort? – user14717