이 바보 같은 질문은, 내가 사과하고 수치에 내 머리를 숨길 갈 것이다, 그러나 : 나는 파이썬에서 작업을 큐에 RQ를 사용하고파이썬/RQ - 모니터링 작업자 상태
. 다음과 같이 작동합니다.
- 작업 A가 시작됩니다. Job A는 웹 API를 통해 데이터를 수집하여 저장합니다.
- 작업 A가 실행됩니다.
- 작업 A가 완료되었습니다.
- A가 완료되면 작업 B가 시작됩니다. 작업 B는 작업 A가 저장 한 각 레코드를 검사하고 추가 응답 데이터를 추가합니다.
- 작업 B가 완료되면 사용자는 보고서가 준비되었음을 알리는 행복한 전자 메일을받습니다. 지금까지
내 코드 :
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()
가 나는 경우 작업 내 최고의 솔루션이 작업 A를 모니터링 할 수있는이 명 노동자, 작업 A의 하나 나 하나의 작업의 B 작업자 것이 었습니다 가정 및 A가 끝나면 B 작업을 시작하십시오.
내 목숨을 구하기 위해 알아 내지 못하는 것은 한 작업자가 다른 작업의 상태를 모니터하는 방법입니다. job.id로 job A의 job ID를 얻을 수 있습니다. w.name으로 작업자 이름을 가져올 수 있습니다. 그러나 그 정보를 다른 직원에게 어떻게 전달할 것인가에 관해서 가장 안 좋은 것은 아닙니다.
또는이 작업을 수행하는 훨씬 간단한 방법이 있습니까?
작업 A가 완료 될 때까지 작업 B를 실행할 수 없다면 (즉, 병렬로 실행할 수 없다는 의미이므로) rq를 사용하는 이유는 무엇입니까? 순차적으로 처리하십시오 (응용 프로그램을 차단하지 않으려면 별도의 스레드 또는 프로세스로 수행) –
A 및 B에 대한 작업은 각각 시간이 오래 걸리므로 별도로 처리 할 수 있기를 바랍니다. 많은 일자리 A를 직업 B와 독립적으로 운영하십시오. 너무 어려울 경우 항복 할 수 있습니다. – user1066609
함께가는 A와 B의 쌍을 가지고 있습니까? 아니면 어떤 B도 A에 의존 할 수 있습니까? 후자의 경우에 당신은 하나의 지옥 동기화 문제를 가지고 있기 때문에. :-) –