2013-11-02 58 views
1

與後臺進程通信,這是一個小問題福利局,但我試圖寫在Django程序控制從一個Django網站雖然串行連接一個Arduino。作爲一個ardunio有一個'功能',當一個新的串行連接被重置時,這意味着它不能在每次加載頁面時不斷地發送單個命令。所以我想知道:運行,並在Django

我已經寫了,它控制了,沒有任何問題串口Arduino的Python程序。

是否有可能在後臺運行python腳本(即它保持活動並保持串行連接活動)的django應用程序/網站,如果有的話如何通過Django與運行的進程進行通信,所以我可以有頁面用按鈕將值傳遞給後臺進程?

+0

這是可能的。我建議你用它實現'websockets'。 – Nirock

回答

1

Django的芹菜是偉大的後臺任務處理。這聽起來像你可以讓你的arduino代碼成爲芹菜任務。這使得事情變得非常簡單 - 任務可以完全訪問您的django模型,並且django進程可以隨時啓動任務。

加芹菜是一個偉大的瑞士軍刀工具,你可以在任何時候,你需要的東西,不是一個請求和響應週期需要較長時間使用。

這看起來像是一個好裁判對我說:

http://www.hiddentao.com/archives/2012/01/27/processing-long-running-django-tasks-using-celery-rabbitmq-supervisord-monit/

我可能會建議使用Redis的作爲經紀人,這些天,B/C,你可以使用Redis的作爲緩存太。

+0

謝謝,這是我想過的路線,但沒有任何芹菜經驗。由於arduino連接需要保留爲活動進程,芹菜可以保持一個進程的打開狀態,只需從隊列中傳遞命令? –

+0

芹菜作爲一個單獨的過程運行(您運行./manage.py芹菜或等效)。通過django,你可以通過調用task.delay()函數向隊列中添加一個「任務」(redis,rabbitmq等)。然後,其中一名芹菜工人會在可能時執行任務並執行任務。爲了向Arduino發送串行命令,我可能會將每個命令都稱爲「任務」。你必須嘗試一下它,但IMO值得學習芹菜b/c它在django項目中被廣泛使用。 – Nils

+0

我只是重新閱讀你的評論。答案是肯定的,芹菜進程可以保持連接的開放。但實際上你也可以在Django中做到這一點。它不象Django的進程死亡之間​​的請求......也許你想要的東西,像http://stackoverflow.com/questions/18013333/django-persistent-api-connections-between-requests? – Nils