我現在有大量文檔要處理,並且正在使用Python RQ來並行化任務。Python RQ:回調模式
我想在每個文檔上執行不同的操作時完成工作流程。例如:A
- >B
- >C
表示在A
完成後,將文檔傳遞到功能A
,繼續執行B
,並返回C
。
但是,Python RQ似乎並沒有很好地支持管道的東西。
這是一個簡單但有點骯髒的做到這一點。總之,管道中的每個函數都以嵌套的方式調用其下一個函數。
例如,對於管道A
→B
→C
。
在頂層,有些代碼是這樣寫的:
q.enqueue(A, the_doc)
其中q是Queue
實例,並在功能A
有這樣的代碼:
q.enqueue(B, the_doc)
而且在B
中,有這樣的事情:
q.enqueue(C, the_doc)
有沒有其他方式比這更優雅?例如一些代碼ONE功能:
q.enqueue(A, the_doc) q.enqueue(B, the_doc, after = A) q.enqueue(C, the_doc, after= B)
depends_on參數是一個最接近我的要求,但是,運行類似:
A_job = q.enqueue(A, the_doc) q.enqueue(B, depends_on=A_job)
將無法正常工作。在執行A_job = q.enqueue(A, the_doc)
後立即執行q.enqueue(B, depends_on=A_job)
。在B入隊時,A的結果可能沒有準備好,因爲它需要時間來處理。
PS:
如果Python的RQ是不是在這個真的很不錯,我可以用什麼其他工具在Python來達到同樣的目的:
- 循環賽並行
- 流水線處理支持
使用3個隊列怎麼樣?一個用於工作a,另一個用於工作b,最後一個用於工作c,唯一的是當工作a結束時,文檔在工作b隊列中排隊,等等...... – Marcel
即使'q.enqueue (B,depends_on = A_job)'作業B將在A完成後處理。當它*處理*而不是*入隊*時,重要的不是什麼? –
@Marcel如何使用3個隊列與使用單個隊列不同?它將如何解決這個問題? –