Ho perso tempo ma non sono riuscito a trovare una soluzione.
Se utilizzo i thread nella mia app distribuiti con uwsgi, non sono sincronizzati.Filettatura Python3 con uWSGI
Qui semplice codice per un esempio (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()]
E quando ho eseguire questa applicazione i i
aumenti di registro, ma ottengo sempre 1
quando una richiesta di make dal browser (o GET. 0
se cambio sleep(3)
prima del i
primo incremento)
Ho provato il decoratore uwsgi.thread, ma ho ottenuto lo stesso risultato.
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
* dispiace per il mio inglese
Hai salvato il mio equilibrio mentale. 'master = false' abbastanza per il mio compito corrente. Ma una domanda veloce: se uso il tuo codice con '@ postfork' ho ottenuto il risultato' print' nel registro due volte per ogni iterazione. Perché? – n4nn31355
@ n4nn31355 Non riesco a riprodurre questo. Quindi penso che abbia a che fare con la tua configurazione di registrazione. O forse hai due processi che scrivono nello stesso file di log. – warvariuc