Можно ли запустить Дафну в сценарии Python без вызова ОС

Возможно ли запустить процесс daphne или даже просто каналы Django из скрипта python?

Рекомендуемый способ сделать это - запустить

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

Мне было интересно, смогу ли я связать это с переменной и запустить так, как мог бы Торнадо

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

4 ответа

Это своего рода обходной путь, но вы можете использовать модуль подпроцесса следующим образом:

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

Проверьте этот поток Вызов внешней команды в Python для получения дополнительной информации об использовании модуля подпроцесса.

Я не знаком с Django Channels, но вы пытались использовать каналы памяти inmemory или redis напрямую? Вы могли бы вообще избежать Дафны. Из того, что я понимаю, daphne кажется уровнем трансляции протоколов, поэтому внешние клиенты могут общаться с Django через daphne (Django использует wsgi, а не asgi, поэтому один Django не может обрабатывать определенные протоколы, такие как связь через веб-сокет). Торнадо не полагается на WSGI.

Примеры тестов Дафни: https://github.com/django/daphne/blob/master/daphne/tests/test_http.py

Канал ChannelLayer не является кросс-процессным. Я не уверен, имеет ли это значение в вашем случае использования. Если это так, вы можете проверить другие бэкэнды (например, каналы Redis) https://channels.readthedocs.io/en/stable/backends.html

Это может быть более прямым, что вы ищете: https://github.com/django/asgi_redis

Вы пробовали обменять торнадо на NGINX?

http://masnun.rocks/2016/11/02/deploying-django-channels-using-daphne/

Я столкнулся с этой же проблемой...

      from daphne.cli import CommandLineInterface
CommandLineInterface().run(('my.asgi', '--bind', ip_address, '--port', '8000'))

Должен сделать трюк. Проблема в том, что я нигде не вижу этого задокументированного, поэтому API может быть не очень стабильным.

Это тот же маршрут кода, что и вызов Дафны через подпроцесс:https://github.com/django/daphne/blob/main/daphne/cli.py#L167https://github.com/django/daphne/blob/main . /дафна/cli.py#L204

Другие вопросы по тегам