Привет.
Вожусь уже 2 день с docker compose.
Проблема в том что контейнер не стартует корректно.
На локальном компе моя схема работает. (не удивительно)
В docker запускаю тестовые функции обращающиеся к базе - все ок.
Проблема с запуском main.py.
При старте контейнера с сервером Flask ловлю следующее:
Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/threading.py", line 973, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.9/threading.py", line 910, in run
self._target(*self._args, **self._kwargs)
File "/server/start.py", line 20, in returnTradeHistory
check_table_db = chectablefromDB(name_table)
File "/server/DataFormatCorrection/UpdateData.py", line 203, in chectablefromDB
if connection:
UnboundLocalError: local variable 'connection' referenced before assignment
Либо
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/threading.py", line 973, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.9/threading.py", line 910, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 922, in run
run_simple(t.cast(str, host), port, self, **options)
File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 1008, in run_simple
inner()
File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 948, in inner
srv = make_server(
File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 780, in make_server
return ThreadedWSGIServer(
File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 686, in __init__
super().__init__(server_address, handler) # type: ignore
File "/usr/local/lib/python3.9/socketserver.py", line 452, in __init__
self.server_bind()
File "/usr/local/lib/python3.9/http/server.py", line 138, in server_bind
socketserver.TCPServer.server_bind(self)
File "/usr/local/lib/python3.9/socketserver.py", line 466, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use
Я так примерно догадываюсь что ему не нравятся мои потоки в Flask.
Пример 1:
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html')
flow1 = Thread(target=app.run)
flow2 = Thread(target=returnTradeHistory, daemon=True)
flow1.start()
flow2.start()
+ к этому перестает открываться web-морда по любому из адресов какие можно придумать.
Вариант где я прописываю в ручную порты и ip дает эффект работы web-морды, но увы не стартует
flow2 автоматом. Даже на локальном компе. Просто стартует сервер, веб-морда и до демона в flow2 дело не доходит.
При запуске из консоли контейнера он так же не запускается с теми же ошибками что и выше.
Пример2 :
flow1 = Thread(target=app.run(host='0.0.0.0', port=5000, debug=True))
flow2 = Thread(target=returnTradeHistory, daemon=True)
flow1.start()
flow2.start()
Вопрос: Я уже не знаю куда конкретно копать.
Тут дело в контейнер на Debian который формирует docker-compose и потоки так не взлетят у него?
Или иная причина?
Убирать потоки не вариант. Мне нужен демон, а время бороться
Celery у меня не очень много.