Estoy teniendo más dificultades para tratar de averiguar la diferencia en el uso entre multiprocessing.Pool y multiprocessing.Queue .
Para ayudar, este es un fragmento de código que es un ejemplo básico de lo que estoy tratando de hacer.
def update(): def _hold(url): soup = BeautifulSoup(url) return soup def _queue(url): soup = BeautifulSoup(url) li = [l for l in soup.find('li')] return True if li else False url = 'www.ur_url_here.org' _hold(url) _queue(url) Estoy tratando de ejecutar _hold() y _queue() al mismo tiempo. No estoy tratando de que se comuniquen entre sí, por lo que no hay necesidad de Pipe . update() se llama cada 5 segundos.
Realmente no puedo entender la diferencia entre crear un grupo de trabajadores o crear una cola de funciones. ¿Alguien puede ayudarme?
Las funciones reales _hold() y _queue() son mucho más elaboradas que el ejemplo, por lo que en realidad es necesaria la ejecución simultánea, solo pensé que este ejemplo sería suficiente para hacer la pregunta.
El Pool y la Queue pertenecen a dos niveles diferentes de abstracción.
El grupo de trabajadores es un paradigma de diseño concurrente que tiene como objetivo abstraer mucha lógica que, de lo contrario, necesitaría implementar usted mismo al usar procesos y colas.
El multiprocessing.Pool en realidad usa una Queue internamente para operar.
Si su problema es lo suficientemente simple, puede confiar fácilmente en un Pool . En casos más complejos, es posible que deba ocuparse de los procesos y las colas usted mismo.
Para su ejemplo específico, el siguiente código debería funcionar.
def hold(url): ... return soup def queue(url): ... return bool(li) def update(url): with multiprocessing.Pool(2) as pool: hold_job = pool.apply_async(hold, args=[url]) queue_job = pool.apply_async(queue, args=[url]) # block until hold_job is done soup = hold_job.get() # block until queue_job is done li = queue_job.get() También le recomiendo que eche un vistazo al módulo concurrent.futures . Como sugiere el nombre, esa es la implementación a prueba de futuro para el paradigma Pool of Workers en Python.
Puede volver a escribir fácilmente el ejemplo anterior con esa biblioteca, ya que lo que realmente cambia son solo los nombres de las API.