2017-02-22 38 views
0

是否可以從python腳本運行daphne進程或Django通道?是否可以在不使用操作系統調用的情況下在python腳本中啓動Daphne

推薦的方式做到這一點,是運行

daphne -b 0.0.0.0 -p 8001 django_project.asgi:channel_layer 

我在想,如果我可以綁定這一個變量並運行它的旋風方式可以

from tornado.web import Application 
application = Application([(r"/", RosbridgeWebSocket), (r"", RosbridgeWebSocket)]) 

回答

1

這是怎樣的一個作品的身邊,但你可以使用subprocess模塊是這樣的:

subprocess.run(["daphne", "-b 0.0.0.0 -p 8001 django_project.asgi:channel_layer"])

檢查此線程Calling an external command in Python關於使用子模塊的更多信息。

+0

是的,我知道我可以將它稱爲子進程,但除非我編寫一堆IPC代碼,否則不會工作 – cjds

+0

您是否考慮過創建一個。 sh bash腳本調用daphne,就像你通常從命令行執行並從子進程調用該腳本一樣? –

+0

這是目前的工作方式。我最好把它作爲一個python對象,雖然 – cjds

1

我不熟悉Django頻道,但您是否嘗試過直接使用inmemory或redis頻道?你可能完全避免達芙妮。據我所知,daphne似乎是協議轉換器層,因此外部客戶端可以通過daphne與Django進行通信(Django使用wsgi而不是asgi,因此Django本身無法處理某些協議,例如websocket通信)。龍捲風不依賴於wsgi。

有在芫測試例子: https://github.com/django/daphne/blob/master/daphne/tests/test_http.py

的inmemory ChannelLayer不是跨進程。我不確定這在你的用例中甚至是重要的。如果是這樣,你可以檢查其他後端(如Redis的通道)https://channels.readthedocs.io/en/stable/backends.html

這可能會更直接,你在找什麼是: https://github.com/django/asgi_redis

+1

我剛剛開始閱讀關於這個昨晚。事實上,這看起來像我必須定製的對象來與我的達芙妮運行其他Python代碼。仍在研究它,但在這裏希望 – cjds

相關問題