Si esto es una pregunta idiota, me disculpo y saldrá a ocultar la cara de vergüenza, pero:Python/rq - el seguimiento de la condición de trabajador
estoy usando rq que hacer cola puestos de trabajo en Python. Quiero que funcione así:
- Empieza el trabajo A. Job A toma datos a través de la API web y los almacena.
- Se ejecuta el trabajo A.
- El trabajo A completa.
- Al finalizar A, se inicia el trabajo B. El trabajo B verifica cada registro almacenado por el trabajo A y agrega algunos datos de respuesta adicionales.
- Al finalizar el trabajo B, el usuario recibe un correo electrónico contento que dice que su informe está listo.
Mi código hasta ahora:
redis_conn = Redis()
use_connection(redis_conn)
q = Queue('normal', connection=redis_conn) # this is terrible, I know - fixing later
w = Worker(q)
job = q.enqueue(getlinksmod.lsGet, theURL,total,domainid)
w.work()
que supone mi mejor solución era tener 2 trabajadores, uno para el trabajo A y uno para B. El trabajador trabajo B podría supervisar el trabajo A y, cuando el trabajo A se realizó, comience en el trabajo B.
Lo que no puedo entender para salvar mi vida es cómo hago que un trabajador supervise el estado de otro. Puedo tomar la identificación del trabajo del trabajo A con job.id. Puedo tomar el nombre del trabajador con w.name. Pero no tengo ni la más mínima idea de cómo paso cualquiera de esa información al otro trabajador.
¿O hay una manera mucho más simple de hacer esto que me falta totalmente?
Si el trabajo B no puede ejecutarse hasta que se complete el trabajo A (lo que implica que no se pueden ejecutar en paralelo), ¿por qué usar rq? Solo hazlos secuencialmente (en un hilo o proceso separado si no quieres bloquear tu aplicación) –
Los trabajos para A y B llevan cada uno un tiempo muy largo, y pueden suceder por separado, así que me gustaría poder sigo corriendo un montón de trabajo A independientemente del trabajo B. Si es demasiado difícil, puedo rendirme. – user1066609
¿Tiene pares de A y B que van juntos, o puede cualquier B depender de algún A? Porque en el último caso tienes un gran problema de sincronización. :-) –