Dokumentacja modułu multiprocessing
przedstawia sposób przekazywania kolejki do procesu rozpoczętego pod numerem multiprocessing.Process
. Ale jak mogę udostępnić kolejkę z asynchronicznymi procesami roboczymi rozpoczętymi pod apply_async
? Nie potrzebuję dynamicznego łączenia się ani niczego innego, tylko sposób, w jaki pracownicy (wielokrotnie) przekazują swoje wyniki z powrotem do bazy.Udostępnianie kolejki wyników między kilkoma procesami
import multiprocessing
def worker(name, que):
que.put("%d is done" % name)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
q = multiprocessing.Queue()
workers = pool.apply_async(worker, (33, q))
ten nie powiedzie się z: RuntimeError: Queue objects should only be shared between processes through inheritance
. Rozumiem, co to oznacza, i rozumiem porady dotyczące dziedziczenia, zamiast wymagać marynowania/rozpakowywania (i wszystkich specjalnych ograniczeń Windows). Ale w jaki sposób przekazuję kolejkę w sposób, który działa? Nie mogę znaleźć przykładu i wypróbowałem kilka alternatyw, które zawiodły na różne sposoby. Prosimy o pomoc?
To się udało, dzięki! Wystąpił niezwiązany problem z połączeniem asynchronicznym w moim oryginalnym kodzie, więc skopiowałem poprawkę również do twojej odpowiedzi. – alexis