Почему, 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())