Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

158
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda