Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

154
Vistas
Cómo usar Queue con subprocesos correctamente

Soy nuevo en la cola y los subprocesos. Por favor, ayúdeme con el siguiente código. Aquí estoy tratando de ejecutar la función hd . Necesito ejecutar la función varias veces, pero solo después de que se haya completado una sola ejecución.

 import queue import threading import time fifo_queue = queue.Queue() def hd(): print("hi") time.sleep(1) print("done") for i in range(3): cc = threading.Thread(target=hd) fifo_queue.put(cc) cc.start()

Salida de corriente

 hi hi hi donedonedone

Rendimiento esperado

 hi done hi done hi done​
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede utilizar un semáforo para sus propósitos

Un semáforo gestiona un contador interno que se reduce con cada llamada de adquisición () y se incrementa con cada llamada de liberación (). El contador nunca puede ir por debajo de cero; cuando adquirir() encuentra que es cero, se bloquea, esperando hasta que algún otro subproceso llame a release().

Un valor predeterminado de Semaphore es 1 ,

subprocesamiento de clase. Semáforo (valor = 1)

por lo que solo un hilo estaría activo a la vez:

 import queue import threading import time fifo_queue = queue.Queue() semaphore = threading.Semaphore() def hd(): with semaphore: print("hi") time.sleep(1) print("done") for i in range(3): cc = threading.Thread(target=hd) fifo_queue.put(cc) cc.start()
 hi done hi done hi done

Como @user2357112supportsMonica mencionó en los comentarios, RLock sería una opción más segura

clase threading.RLock

Esta clase implementa objetos de bloqueo reentrantes. Un bloqueo reentrante debe ser liberado por el subproceso que lo adquirió . Una vez que un subproceso ha adquirido un bloqueo de reentrada, el mismo subproceso puede adquirirlo nuevamente sin bloquear; el hilo debe soltarlo una vez por cada vez que lo haya adquirido.

 import queue import threading import time fifo_queue = queue.Queue() lock = threading.RLock() def hd(): with lock: print("hi") time.sleep(1) print("done") for i in range(3): cc = threading.Thread(target=hd) fifo_queue.put(cc) cc.start()
over 4 years ago · Santiago Trujillo Denunciar

0

por favor, ponga la impresión ("abajo") antes de dormir. funcionará bien. Motivo: su programa hará esto: thread1
: imprimir
dormir
print pero mientras el subproceso está durmiendo, otros subprocesos estarán trabajando e imprimiendo su primer comando. a mi modo, el subproceso escribirá el primero, escribirá el segundo y luego se irá a dormir y esperará a que aparezcan otros subprocesos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda