При использовании Thread запускается "лишний" поток

Стоит задача создать менеджер сессий в Django/selenium. Для этого необходимо запустить в новом потоке основной цикл класса Manager. Однако при старте сервера цикл в Manager.main запускается два раза, при этом один из них мусорный, не обновляет значения сессий. Как можно подобную проблему решить?

Код менеджера:

# manager.py
class Manager:
    def __init__(self, max_workers):
        self.sessions_in_line: list[Session] = list()
        self.active_sessions: list[Session] = list()
        self.max_workers = max_workers

    # ...

    def main(self):
        logging.info("Manager.main loop func was successfully started!")
        while True:
            logging.info(f"ACTIVE SESSIONS: {self.active_sessions}")
            logging.info(f"SESSIONS IN LINE: {self.sessions_in_line}")
            with PoolExecutor(max_workers=self.max_workers) as executor:
                for session in self.sessions_in_line:
                    if session.status == "":
                        executor.submit(session.start)
                        try:
                            if session.url in session.driver.current_url:
                                self.sessions_in_line.remove(session)
                                self.active_sessions.append(session)
                        except AttributeError:
                            pass
            with PoolExecutor(max_workers=self.max_workers) as executor:
                for session in self.active_sessions:
                    if session.status == "Регистрация":
                        executor.submit(session.register)
            time.sleep(15)


manager = Manager(max_workers=10)

Способ запуска потока:

# manage.py
# ...
import manager from sessions_management

# ...

if __name__ == '__main__':
    class ManagerThread(threading.Thread):
        def run(self) -> None:
            manager.main()
    t = ManagerThread()
    t.start()
    main()

Логи:

INFO:root:Manager.main loop func was successfully started!
INFO:root:ACTIVE SESSIONS: []
INFO:root:SESSIONS IN LINE: []
INFO:root:Manager.main loop func was successfully started!
INFO:root:ACTIVE SESSIONS: []
INFO:root:SESSIONS IN LINE: []

Функция main вызывает авторелоадер https://github.com/django/django/blob/7119f40c9881666b6f9b5cf7df09ee1d21cc8344/django/core/management/commands/runserver.py#L118 , который просто перезапускает приложение, сам себя ещё раз с флагом https://github.com/django/django/blob/7119f40c9881666b6f9b5cf7df09ee1d21cc8344/django/utils/autoreload.py#L274

Попробуй выключить авторелоад.

Но лучше запускай "менеджер сессий" как admin команду отдельно или вообще без интеграции в django ведь она тут и не используется.

Вернуться на верх