PyQt6 дает сбой при использовании многопроцессорной обработки и компиляции в .exe.Python

Программы на Python
Anonymous
PyQt6 дает сбой при использовании многопроцессорной обработки и компиляции в .exe.

Сообщение Anonymous »

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

import multiprocessing as mp

class MainWindow(BaseWindow):
def __init__(self, app: QApplication, ui: Ui_MainWindow) -> None:
super(MainWindow, self).__init__(app, ui)
self.pool = mp.Pool(initializer=init_logging)
здесь

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

self.pool = mp.Pool(initializer=init_logging)Часть 
заставляет приложение размножаться и в конечном итоге разрушать окна, когда я компилирую его в .exe с помощью приведенного ниже сценария.

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

@echo off
pyinstaller --noconfirm --onefile --windowed --icon "epey.ico" --add-data "log_config.json;." --add-data "JSONFormatter.py;." --distpath ./dist "main.py"
del main.spec
pause
если я запускаю его с помощью python main.py, все в порядке.
Что я пробовал:
  • Я пытался удалить:

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

def init_logging():
log_dir = Path("logs")
if not log_dir.exists():
log_dir.mkdir()

if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"):
config_file = Path(sys._MEIPASS) / "log_config.json"  # type: ignore
else:
config_file = Path("log_config.json")
with open(config_file) as f:
config = json.load(f)

logging.config.dictConfig(config)
queue_handler = logging.getHandlerByName("queue_handler")
if queue_handler is not None:
queue_handler.listener.start()  # type: ignore
atexit.register(queue_handler.listener.stop)  # type: ignore
Я думаю, что, возможно, это вызывает проблему в self.pool = mp.Pool(initializer=init_logging), потому что когда я компилирую программу в .exe, она получает конфигурацию журнала из временного файла (sys._MEIPASS), но это не сработало.
Чего я ожидал
  • Программа, которая не размножается, открывает только одно окно, работает нормально.


Подробнее здесь: https://stackoverflow.com/questions/790 ... d-into-exe

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