Ich verschwendete viel Zeit, konnte aber keine Lösung finden.
Wenn ich Threads in meiner App verwende, die mit uwsgi bereitgestellt werden, sind sie nicht synchronisiert.Python3 Threading mit uWSGI
Hier einfacher Code für ein Beispiel (wsgi.py):
from time import sleep
import threading
i = 0
def daemon():
global i
while True:
i += 1
print(i)
sleep(3)
th = threading.Thread(target=daemon, args=())
th.start()
def application(environ, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [str(i).encode()]
Und wenn ich laufe dies den i
Anstieg der log-App, aber ich habe immer 1
erhalten, wenn eine Make-Anforderung von Browser (oder erhalten. 0
wenn ich bewege sleep(3)
vor i
ersten Schritt)
Ich habe versucht, uwsgi.thread Dekorateur, aber das gleiche Ergebnis.
uwsgi config:
[uwsgi]
socket = 127.0.0.1:3034
plugins-dir = /srv/uwsgi
plugin = python34
uid = py3utils
gid = py3utils
chdir = /srv/python/3/py3utils/tht/app/
wsgi-file = wsgi.py
enable-threads = true
daemonize = %(chdir)/../uwsgi.log
master = true
die-on-term = true
touch-reload = ../uwsgi_restart.txt
* sorry für mein Englisch
Sie haben meine geistige Gesundheit gerettet. 'master = false' genug für meine aktuelle Aufgabe. Aber eine kurze Frage: Wenn ich Ihren Code mit '@ Postfork' verwende, habe ich' print' Ergebnis im Log zweimal für jede Iteration. Warum? – n4nn31355
@ n4nn31355 Ich konnte das nicht reproduzieren. Ich denke, es hat mit Ihrer Protokollierungskonfiguration zu tun. Oder vielleicht haben Sie zwei Prozesse, die in dieselbe Protokolldatei schreiben. – warvariuc