Como usar a fila de multiprocessamento em Python?
estou a ter muita dificuldade em compreender como funciona a fila de multiprocessamento em python e como a implementar. Digamos que tenho dois módulos python que acessam dados de um arquivo compartilhado, vamos chamar esses dois módulos de um escritor e um leitor. Meu plano é fazer com que tanto o leitor quanto o escritor coloquem pedidos em duas filas de multiprocessamento separadas, e então ter um terceiro processo pop esses pedidos em um loop e executar como tal.
O meu principal problema é que não sei como para implementar multiprocessamento.fila corretamente, você realmente não pode instanciar o objeto para cada processo, uma vez que serão filas separadas, como você se certificar de que todos os processos que se relacionam com uma fila compartilhada (ou, neste caso, filas)2 answers
O meu principal problema é que eu realmente não sei como implementar multiprocessamento.fila corretamente, você realmente não pode instanciar o objeto para cada processo, uma vez que serão filas separadas, como você se certificar de que todos os processos que se relacionam com uma fila compartilhada (ou, neste caso, filas)
Este é um exemplo simples de um leitor e escritor compartilhando uma única fila... O escritor envia um monte de inteiros para o leitor; quando o escritor fica sem números, ele envia 'feito', o que permite ao leitor saber para sair do loop de leitura.
from multiprocessing import Process, Queue
import time
import sys
def reader_proc(queue):
## Read from the queue; this will be spawned as a separate Process
while True:
msg = queue.get() # Read from the queue and do nothing
if (msg == 'DONE'):
break
def writer(count, queue):
## Write to the queue
for ii in range(0, count):
queue.put(ii) # Write 'count' numbers into the queue
queue.put('DONE')
if __name__=='__main__':
pqueue = Queue() # writer() writes to pqueue from _this_ process
for count in [10**4, 10**5, 10**6]:
### reader_proc() reads from pqueue as a separate process
reader_p = Process(target=reader_proc, args=((pqueue),))
reader_p.daemon = True
reader_p.start() # Launch reader_proc() as a separate python process
_start = time.time()
writer(count, pqueue) # Send a lot of stuff to reader()
reader_p.join() # Wait for the reader to finish
print("Sending {0} numbers to Queue() took {1} seconds".format(count,
(time.time() - _start)))
Em "da fila de importação" não existe nenhum módulo chamado fila, em vez de multiprocessamento deve ser usado. Portanto, deve ser parecido com"Da Fila de importação multiprocessada"