Долго выполняющаяся задача Python в потоке не работает внутри DockerPython

Программы на Python
Anonymous
Долго выполняющаяся задача Python в потоке не работает внутри Docker

Сообщение Anonymous »

Я пытаюсь развернуть свой веб-сайт. Более или менее я соединил все внутри докера, и БД отлично работает с моим кодом на Python.
Однако внутри моего кода у меня есть длительный поток. Это должно обновлять базу данных каждые 15 минут. это код.

Код: Выделить всё

import time
import threading
import traceback

class PeriodicTask:
def __init__(self, delay, task):
self.delay = delay
self.task = task
self.stop_event = threading.Event()
self.task_thread = None

def signal_handler(self, sig, frame):
print(f"Signal {sig} received. Stopping...")
self.stop_event.set()

def every(self):
next_time = time.time() - self.delay
# signal.signal(signal.SIGINT, self.signal_handler)
try:
while not self.stop_event.is_set():

while time.time() < next_time and not self.stop_event.is_set():
time.sleep(5)  # Check stop_event every 5 seconds
if self.stop_event.is_set():
break

try:
self.task()
except Exception:
traceback.print_exc()
# in production code you might want to have this instead of course:
# logger.exception("Problem while executing repetitive task.")
time.sleep(max(0, next_time - time.time()))

# Skip tasks if we are behind schedule:
next_time += (time.time() - next_time) // self.delay * self.delay + self.delay
# print(next_time)
finally:
# signal.signal(signal.SIGINT, signal.SIG_DFL)
print(f"Loop {self.delay} has been stopped safely.")

def start(self):
self.task_thread = threading.Thread(target=self.every)
self.task_thread.start()

def stop(self):
self.stop_event.set()
if self.task_thread is not None:
self.task_thread.join()

По какой-то причине внутри докера он не работает должным образом. Просто запускаю на своем компьютере, все работает, а внутри докера - нет.
Я привязал к вставке меньшего времени ожидания, например 5 секунд, но даже после запуска он не работает Я сразу распечатываю запрошенные данные, и каждые 5 секунд они не работают. Он ничего не печатает.
Он начинает немного работать только тогда, когда я делаю запрос по ссылке. (это серверная часть fastapi)
он печатает 5–9 журналов данных, а затем ничего.
У меня работают еще 2 контейнера. 1 с nginx, а другой с PostgreSQL.
Что я могу попробовать сделать? Спасибо большое!

Подробнее здесь: https://stackoverflow.com/questions/786 ... ide-docker

Вернуться в «Python»