Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

165
Views
Cola de multiprocesamiento frente a grupo

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.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!