2014-10-07 56 views
3

我有一個standalong腳本,它會刮擦一個頁面,啓動一個到數據庫的連接,並向它寫入數據庫。我需要它在x小時後定期執行。我可以使用一個bash腳本,用僞代碼使其:芹菜:爲什麼我需要經紀人進行定期任務?

while true 
do 
    python scraper.py 
    sleep 60*60*x 
done 

從我瞭解的消息中介,它們被用於從一個正在運行的程序發出「信號」到另一個,就像在原則HTTP。就像我有一段代碼接受來自用戶的電子郵件ID一樣,它將帶有email-id的信號發送到將發送電子郵件的另一段代碼。

我需要芹菜在heroku上運行定期任務。我已經在單獨的服務器上有一個mongodb。爲什麼我需要爲rabbitmq或redis運行另一臺服務器?我可以在沒有經紀人的情況下使用芹菜嗎?

回答

8

Celery體系結構旨在跨多個服務器擴展和分配任務。對於像你這樣的網站,這可能是一個矯枉過正的問題。通常需要隊列服務來維護任務列表並指示已完成任務的狀態。

你可能想看看Huey。 Huey is small-scale Celery "Clone" needing only Redis as an external dependency,不是RabbitMQ。它仍然使用Redis隊列機制來排隊隊列中的任務。

還存在Advanced Python scheduler甚至不需要Redis,但可以在進程內存儲隊列的狀態。

或者,如果您的定期任務數量非常少,沒有任何延遲的任務,我只需使用Cron和純Python腳本來運行任務。

+0

如何將MySQL數據庫用於Celery Python? – OPV 2017-11-23 22:52:32

+0

@OPV請打開一個新的問題,這是芹菜文檔不包括它 – 2017-11-27 21:05:19

2

由於芹菜documentation解釋說:

芹菜通過消息進行通信,通常使用經紀人的客戶和工人之間進行調解。要啓動任務,客戶端會向隊列中添加一條消息,然後代理將該消息傳遞給工作人員。

您可以使用現有的MongoDB數據庫作爲代理。見Using MongoDB

相關問題