Jeśli jest to idiotyczne pytanie, przepraszam i pójdzie ukryć moją głowę ze wstydu, ale:Python/RQ - monitorowanie statusu pracownika
Używam RQ kolejce do pracy w Pythonie. Chcę, aby działało tak:
- Zadanie A rozpoczyna się. Zadanie A pobiera dane za pośrednictwem interfejsu API sieci Web i przechowuje je.
- Zadanie A działa.
- Zadanie zakończone.
- Po zakończeniu A rozpoczyna się zadanie B. Zlecenie B sprawdza każdy rekord przechowywany przez zadanie A i dodaje dodatkowe dane odpowiedzi.
- Po zakończeniu zadania B użytkownik otrzymuje szczęśliwy e-mail z informacją, że raport jest gotowy.
Mój kod do tej pory:
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()
Przypuszczałem moim najlepszym rozwiązaniem było mieć 2 pracowników, jeden dla pracy A i jeden dla B. Praca robotnik B może monitorować zadania A, a gdy praca Zrobiono A, zacznij pracę B.
Czego nie mogę wymyślić, aby uratować moje życie, to to, jak mogę zatrudnić jednego pracownika do monitorowania statusu innego. Mogę pobrać identyfikator pracy z zadania A z job.id. Mogę pobrać nazwę pracownika z w.name. Ale nie myśl o tym, jak przekazać tę informację innemu pracownikowi.
Czy jest o wiele prostszy sposób na zrobienie tego, czego zupełnie brakuje?
Jeśli zlecenie B nie może być wykonane do czasu zakończenia zadania A (sugerując, że nie mogą być uruchomione równolegle), dlaczego w ogóle używać funkcji rq? Po prostu wykonaj je sekwencyjnie (w oddzielnym wątku lub procesie, jeśli nie chcesz blokować aplikacji). –
Każde zadanie dla A i B zajmuje bardzo dużo czasu i może się zdarzyć osobno, więc chciałbym móc utrzymuj dużo pracy A niezależnie od pracy B. Jeśli jest to zbyt trudne, mogę się jednak poddać. – user1066609
Czy masz pary A i B, które pasują do siebie, czy też dowolne B może być zależne od dowolnego A? Ponieważ w tym drugim przypadku masz jeden problem z synchronizacją. :-) –