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)

Author: jab, 2012-07-17

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)))
 67
Author: Mike Pennington, 2018-07-22 23:16:52

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"

 7
Author: Jean, 2018-02-03 01:11:45