Почему, multiproccessing.Pool создает в собранном приложении множество новых окон

Почему, multiproccessing.Pool создает в собранном приложении .exe (pyinstaller) множество новых окон, хотя я ограничил его условием __name__==__main__

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel
from PyQt6.QtCore import QObject, pyqtSignal, QThread
import multiprocessing

# Функция, выполняющая долгую задачу
def long_task(num):
    result = num * num
    return result

# Класс-обертка для управления процессом
class Worker(QObject):
    # Сигнал для отправки результата обратно в главный поток
    finished = pyqtSignal(int)`введите сюда код`

    def run_tasks(self, data):
        # Создаем пул процессов
        with multiprocessing.Pool(processes=4) as pool:
            # Выполняем задачи параллельно
            results = pool.map(long_task, data)
            # Отправляем результаты через сигнал
            for res in results:
                self.finished.emit(res)

# Основное окно приложения
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt6 + Multiprocessing")
        self.layout = QVBoxLayout()

        self.start_button = QPushButton("Начать вычисления")
        self.result_label = QLabel("Результаты: ")

        self.layout.addWidget(self.start_button)
        self.layout.addWidget(self.result_label)
        self.setLayout(self.layout)

        # Соединяем кнопку с методом запуска
        self.start_button.clicked.connect(self.start_processing)

    def start_processing(self):
        # Создаем поток для выполнения Worker, чтобы не блокировать GUI
        worker_thread = QThread(self)
        worker = Worker()
        worker.moveToThread(worker_thread)

        # Передаем данные в Worker
        data_to_process = [i for i in range(10)]
        
        # Подключаем сигналы и слоты
        worker_thread.started.connect(lambda: worker.run_tasks(data_to_process))
        worker.finished.connect(self.update_results)
        worker.finished.connect(worker_thread.quit)
        worker_thread.start()

    def update_results(self, result):
        # Обновляем метку с результатом
        current_text = self.result_label.text()
        self.result_label.setText(current_text + f" {result}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

Ответы (0 шт):