Потоки UWSGI не делятся данными - PullRequest
0 голосов
/ 28 января 2019

У меня есть приложение 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
...