У меня есть приложение wsgi, которое запускается в режиме императора.Проблема в том, что внутри моего приложения wsgi я запускаю поток, который не делится данными с основным процессом.
Рассмотрим приложение, подобное этому:
[uwsgi]
module = myproject.myapp:app
uid = www-data
gid = www-data
master = true
processes = 1
socket = 127.0.0.1:8320
chmod-socket = 660
vacuum = true
die-on-term = true
chdir = /etc/wsgiproject/
wsgi-file = /etc/wsgiproject/myproject/myapp.py
python_path = …
enable-threads = true
multithread = true
myapp file:
from myproject.app import create_app
import threading
app = create_app(port)
if __name__ == "__main__":
app.run(port=port)
def create_app():
app = Flask(__name__)
counter = Counter(app)
counter.number = 10
threading.Thread(name='monitor', target=counter.monitor, daemon=True).start()
return app
class Counter():
def monitor(self):
while(True):
sleep(10)
print(f'current value: self.number')
def __init(self, app):
self.app = app
self.number = 0
app.add_url_rule('/increaseNumber', view_func=self.increase_number, methods=['POST'])
def increase_number(self):
print(f'increased number: {self.number}')
self.number+=1
Проблема в том, что мой демон никогда не обновляет числовое значение,однако он обновляется, когда wsgi получает запрос.
Ожидаемый результат:
current value: 0
current value: 0
increased number: 1
current value: 1
increased number: 2
current value: 2
Фактический результат:
current value: 0
current value: 0
increased number: 1
current value: 0 <-- daemon has old value
increased number: 2
current value: 0