Я пишу библиотеку отладки python, которая открывает фляжный сервер в новом потоке и предоставляет информацию о программе, в которой он работает. Это отлично работает, когда отлаживаемая программа сама по себе не является веб-сервером. Однако, если я попытаюсь запустить его одновременно с другим сервером фляг, работающим в режиме отладки, все сломается. Когда я пытаюсь получить доступ ко второму серверу, результат чередуется между двумя серверами.
Вот пример:
from flask.app import Flask
from threading import Thread
# app1 represents my debugging library
app1 = Flask('app1')
@app1.route('/')
def foo():
return '1'
Thread(target=lambda: app1.run(port=5001)).start()
# Cannot change code after here as I'm not the one writing it
app2 = Flask('app2')
@app2.route('/')
def bar():
return '2'
app2.run(debug=True, port=5002)
Теперь, когда я посещаю http://localhost:5002/ в своем браузере, результат может быть либо 1
, либо 2
вместо этого. постоянно быть 2
.
Использование multiprocessing.Process
вместо Thread
дает тот же результат.
Как это происходит и как этого избежать? Это неизбежно с flask/werkzeug/WSGI? Мне нравится flask за его простоту, и в идеале я хотел бы продолжать его использовать. Если это невозможно, какую самую простую библиотеку/фреймворк я могу использовать, чтобы не мешать другим веб-серверам, работающим одновременно? Я также хотел бы использовать потоки вместо процессов, если это возможно.