2016-01-18 32 views
2

我已經使用了很多分發任務包,如celery,python-rq,它們都依賴於外部服務,如redis,rabbit-mq等。生產者和工人(python)的任何本地任務隊列(可能是磁盤隊列或mem隊列?)?

,但通常我並不需要一個queue service,換句話說,不要安裝在我的VPS redis或其他非蟒蛇服務(也簡化環境)

我應該說將producerworker分割成不同的過程(兩個代碼文件)是很好的。使用multiprocessing.Queue需要將所有內容放入一個文件中,並且需要編寫大量附加代碼來捕獲ctrl+c以處理exit並保存當前入隊的任務。這不會發生,通過使用celery,python-rq,雖然停止工人和生產者,任務仍然保存在隊列中。

我想使用一個本地隊列(只能工作在pip install xxx),如磁盤隊列。 經過一番搜索,只找到queuelib(Collection of persistent (disk-based) queues),但遺憾的是它不支持從多進程訪問。

回答

0

檢查Luigi包。它允許定義具有所有依賴性的多個任務,然後請求它使用特定參數運行。

它運行所謂的調度程序,它可以是本地的或「生產」的一種形式的Web服務。

Luigi有一個完成任務的概念,被標記爲某種目標的存在。目標可以是本地文件系統上的文件,也可以是AWS S3等文件。一旦目標存在,任務就會被視爲完成。 Luigi負責自動創建目標文件,這意味着,該文件首先在某個臨時位置創建,然後在真正完成後移至最後一個位置。這可以防止有半成品的目標。

如果您在中途停止處理,下一次啓動將檢查是否存在完成的目標,並開始只處理尚未完成的目標。

沒有額外的安裝服務,該命令自行設置本地或「生產」調度程序(如果不存在)。