¿Cómo usar subprocesos en PyQt5?

Requisito previo: PyQt5 y subprocesamiento múltiple

El subprocesamiento múltiple se refiere a la ejecución simultánea de varios subprocesos cambiando rápidamente el control de la CPU entre subprocesos (llamado cambio de contexto). El bloqueo de intérprete global de Python limita la ejecución de un subproceso a la vez, incluso si la máquina contiene varios procesadores.

En este artículo, aprenderemos cómo usar subprocesos en Pyqt5. Al crear una GUI, será necesario realizar múltiples trabajos/operaciones en el backend. Supongamos que queremos realizar 4 operaciones simultáneamente. El problema aquí es que cada operación se ejecuta una por una. Durante la ejecución de una operación, la ventana de la GUI tampoco se moverá y es por eso que necesitamos subprocesos. Ambas implementaciones se dan a continuación, lo que obviamente ayudará a comprender mejor sus diferencias.

Acercarse

  • Se requieren bibliotecas de importación
  • Crear una ventana simple
  • Agregar botón con comando
  • Ejecutar Pyqt5

sin roscar

Trabajar sin hilos, hace que el proceso se retrase. Además, la ventana no se moverá hasta que se lleve a cabo la ejecución completa.

Python3

# Import Module
import sys
from PyQt5.QtWidgets import *
import time
  
class ListBox(QWidget):
  
    def __init__(self):
        super().__init__()
  
        self.Button()
  
    def Button(self):
        # Add Push Button
        clear_btn = QPushButton('Click Me', self)
        clear_btn.clicked.connect(self.Operation)
  
        # Set geometry
        self.setGeometry(200, 200, 200, 200)
  
        # Display QlistWidget
        self.show()
  
    def Operation(self):
        print("time start")
        time.sleep(10)
        print("time stop")
  
  
if __name__ == '__main__':
    app = QApplication(sys.argv)
      
    # Call ListBox Class
    ex = ListBox()
  
    # Close the window
    sys.exit(app.exec_())

Producción:

Con Roscado

Cada vez que hagamos clic en el botón «Click Me» , llamará al método thread() . Dentro del método thread, estamos creando un Objeto Thread donde definimos el nombre de nuestra función.

Python3

# Import Module
import sys
from PyQt5.QtWidgets import *
import time
from threading import *
  
class ListBox(QWidget):
  
    def __init__(self):
        super().__init__()
  
        self.Button()
  
    def Button(self):
        # Add Push Button
        clear_btn = QPushButton('Click Me', self)
        clear_btn.clicked.connect(self.thread)
  
        # Set geometry
        self.setGeometry(200, 200, 200, 200)
  
        # Display QlistWidget
        self.show()
  
    def thread(self):
        t1=Thread(target=self.Operation)
        t1.start()
  
    def Operation(self):
        print("time start")
        time.sleep(10)
        print("time stop")
  
  
if __name__ == '__main__':
    app = QApplication(sys.argv)
      
    # Call ListBox Class
    ex = ListBox()
  
    # Close the window
    sys.exit(app.exec_())

Producción:

Publicación traducida automáticamente

Artículo escrito por abhigoya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *