Многопоточность не работает в exe, созданном pyinstaller

Проблема:

После изменения на exe Thread не запускается. Когда я запускаю в pycharm, все работает правильно.

Информация о приложении и пример кода:

Мое приложение смешивает django с пользовательским приложением.

Запуск Django по команде: .\myapp.exe runserver localhost:40218 --noreload.

import os
import threading

import django
from django.core.management.commands.runserver import Command as runserver

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rest_api.settings.base')
django.setup()
runserver.default_port = "40218"

from app.processes import start_processing  # noqa: E402
from app.threads_configuration import multiple_threads_creator_wrapper  # noqa: E402
from manage import main  # noqa: E402

if __name__ == '__main__':
    try:
        ctx = ctx_manager()
        threading.Thread(target=multiple_threads_creator_wrapper, args=(start_processing,)).start()
        main()
    except Exception as e:
        print(f'Application closed due to error: {str(e)}')

multiple_threads_creator_wrapper:

def multiple_threads_creator_wrapper(target, *args, **kwargs):
    LimitedThread(target=target, *args, **kwargs).start()
    RepeatedTimer(target, *args, **kwargs)

Конфигурация потока:

class Config:
        def __init__(self) -> None:
            self.maxThreads = 10
            self.runEveryXSeconds = 5  
    
    
    _config = Config()
    _threadLimiter = threading.BoundedSemaphore(_config.maxThreads)
    
    
    class LimitedThread(threading.Thread):
        def run(self):
            _threadLimiter.acquire()
            try:
                self._target(*self._args, **self._kwargs)
            finally:
                _threadLimiter.release()
    
    
    class RepeatedTimer(object):
        def __init__(self, function, *args, **kwargs):
            self._timer = None
            self.interval = _config.runEveryXSeconds
            self.function = function
            self.is_running = False
            self.next_call = time.time()
            self._args = args
            self._kwargs = kwargs
            self.start()    
Вернуться на верх