Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

153
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!