es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Establecer el tiempo de espera de ZMQ – con una condición

Estoy trabajando en una aplicación cliente-servidor, con varios clientes.
Un proceso crea trabajos y los inicia. El servidor espera en un socket ZMQ las respuestas de estos trabajos.

El problema:

Actualmente estoy trabajando con 6 trabajos y quiero recibir una respuesta de al menos 4. Después de recibir 4 respuestas, quiero esperar 2 segundos y, si no recibo más resultados, procesar los resultados que obtuve y luego volver a escuchar en el socket.

Mis pensamientos:

He visto varias formas (Poll, ZMQ_CONNECT_TIMEOUT, etc.), pero no pude encontrar una forma de usarlo en mi caso.

Pensé en iniciar otro proceso en el servidor una vez que se hayan completado 4 trabajos, que espere durante 2 segundos y luego envíe una señal SIGSTP, pero tengo miedo de que afecte el regreso del servidor a la escucha en el socket.

¿Alguna sugerencia?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en ZeroMQ y PyZMQ, hay varias formas en las que puedes abordar este problema.

    Una opción podría ser usar la función zmq.Poller() para monitorear los zócalos ZMQ en busca de actividad. Puedes establecer un valor de tiempo de espera para el poller, como 2 segundos, y si no hay actividad durante ese tiempo, puedes procesar los resultados recibidos hasta ese momento y luego volver a esperar en el zócalo. Para asegurarte de recibir respuestas de al menos 4 trabajos, puedes llevar un contador para realizar un seguimiento del número de respuestas recibidas y solo procesar los resultados cuando ese contador llega a 4.

    Otro enfoque podría ser usar los zócalos zmq.PUSH y zmq.PULL en lugar de los zócalos zmq.REQ y zmq.REP. Puedes crear un zócalo PUSH en el lado del servidor y hacer que cada trabajo envíe sus resultados a este zócalo. El servidor puede usar un zmq.Poller() para monitorear este zócalo en busca de datos entrantes y procesar los resultados tan pronto como se hayan recibido 4.

    En general, hay muchas formas de abordar este problema utilizando ZeroMQ y PyZMQ. Es importante considerar tu caso de uso específico y elegir el enfoque que tenga más sentido para tu aplicación.

Comments are closed.