В настоящее время я работаю над проектом Django, который работает на Raspberry Pi с сенсорным экраном.Графический интерфейс Kivy отображается на сенсорном экране и может обновляться веб-интерфейсом, предоставленным Django.Взаимодействие с сенсорным экраном также может видеть пользователь сайта.Приложение Kivy (kivy.app.App
) запускается в потоке
class SimpleKivyThread(threading.Thread):
def __init__(self):
Thread.__init__(self)
self.app = SimpleApp()
def run(self):
self.app.run()
из модуля __init__.py моего приложения Django.
Поэтому, если я использую команду python3 manage.py runserver --noreload
,Проект работает очень хорошо, возможна связь между приложением Django и приложением Kivy.Я должен использовать флаг --noreload
для подавления автоматической перезагрузки кода, потому что это дублирует графический интерфейс с тем эффектом, что приложение Django не имеет доступа ни к одному из созданных графических интерфейсов.
Но если я хочу использовать егона сервере Apache 2 с mod_wsgi
на моем Raspberry Pi (с Raspbian) error.log
сначала показывает следующее:
[Tue Sep 18 01:08:27.963060 2018] [mpm_prefork:notice] [pid 440] AH00169: caught SIGTERM, shutting down
[Tue Sep 18 01:08:28.111606 2018] [mpm_prefork:notice] [pid 976] AH00163: Apache/2.4.25 (Raspbian) mod_wsgi/4.5.11 Python/3.5 configured -- resuming normal operations
[Tue Sep 18 01:08:28.111883 2018] [core:notice] [pid 976] AH00094: Command line: '/usr/sbin/apache2'
, и если я пытаюсь загрузить страницу из Apache, яполучите это в журнале:
[Tue Sep 18 01:11:11.520195 2018] [wsgi:error] [pid 979] [\x1b[1;32mINFO\x1b[0m ] [Logger ] Record log in /var/www/.kivy/logs/kivy_18-09-18_14.txt
[Tue Sep 18 01:11:11.520537 2018] [wsgi:error] [pid 979] [\x1b[1;32mINFO\x1b[0m ] [Kivy ] v1.11.0.dev0, git-9e742f3, 20180630
[Tue Sep 18 01:11:11.520922 2018] [wsgi:error] [pid 979] [\x1b[1;32mINFO\x1b[0m ] [Python ] v3.5.3 (default, Jan 19 2017, 14:11:04)
[Tue Sep 18 01:11:11.520944 2018] [wsgi:error] [pid 979] [GCC 6.3.0 20170124]
[Tue Sep 18 01:11:11.520986 2018] [wsgi:error] [pid 979]
[Tue Sep 18 01:11:11.586830 2018] [wsgi:error] [pid 979] [\x1b[1;32mINFO\x1b[0m ] [Factory ] 194 symbols loaded
[Tue Sep 18 01:11:12.355774 2018] [wsgi:error] [pid 979] [\x1b[1;32mINFO\x1b[0m ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[Tue Sep 18 01:11:12.427827 2018] [wsgi:error] [pid 979] [\x1b[1;32mINFO\x1b[0m ] [Text ] Provider: sdl2
[Tue Sep 18 01:11:13.032137 2018] [wsgi:error] [pid 979] [\x1b[1;32mINFO\x1b[0m ] [Window ] Provider: egl_rpi
[Tue Sep 18 01:11:14.321146 2018] [wsgi:error] [pid 980] [\x1b[1;32mINFO\x1b[0m ] [Logger ] Record log in /var/www/.kivy/logs/kivy_18-09-18_15.txt
[Tue Sep 18 01:11:14.321466 2018] [wsgi:error] [pid 980] [\x1b[1;32mINFO\x1b[0m ] [Kivy ] v1.11.0.dev0, git-9e742f3, 20180630
[Tue Sep 18 01:11:14.321836 2018] [wsgi:error] [pid 980] [\x1b[1;32mINFO\x1b[0m ] [Python ] v3.5.3 (default, Jan 19 2017, 14:11:04)
[Tue Sep 18 01:11:14.321856 2018] [wsgi:error] [pid 980] [GCC 6.3.0 20170124]
[Tue Sep 18 01:11:14.321877 2018] [wsgi:error] [pid 980]
[Tue Sep 18 01:11:14.392945 2018] [wsgi:error] [pid 980] [\x1b[1;32mINFO\x1b[0m ] [Factory ] 194 symbols loaded
[Tue Sep 18 01:11:15.166843 2018] [wsgi:error] [pid 980] [\x1b[1;32mINFO\x1b[0m ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[Tue Sep 18 01:11:15.246366 2018] [wsgi:error] [pid 980] [\x1b[1;32mINFO\x1b[0m ] [Text ] Provider: sdl2
[Tue Sep 18 01:11:15.924217 2018] [wsgi:error] [pid 980] [\x1b[1;32mINFO\x1b[0m ] [Window ] Provider: egl_rpi
[Tue Sep 18 01:11:17.353295 2018] [wsgi:error] [pid 982] [\x1b[1;32mINFO\x1b[0m ] [Logger ] Record log in /var/www/.kivy/logs/kivy_18-09-18_16.txt
[Tue Sep 18 01:11:17.353665 2018] [wsgi:error] [pid 982] [\x1b[1;32mINFO\x1b[0m ] [Kivy ] v1.11.0.dev0, git-9e742f3, 20180630
[Tue Sep 18 01:11:17.354092 2018] [wsgi:error] [pid 982] [\x1b[1;32mINFO\x1b[0m ] [Python ] v3.5.3 (default, Jan 19 2017, 14:11:04)
[Tue Sep 18 01:11:17.354116 2018] [wsgi:error] [pid 982] [GCC 6.3.0 20170124]
[Tue Sep 18 01:11:17.354141 2018] [wsgi:error] [pid 982]
[Tue Sep 18 01:11:17.426928 2018] [wsgi:error] [pid 982] [\x1b[1;32mINFO\x1b[0m ] [Factory ] 194 symbols loaded
[Tue Sep 18 01:11:18.302721 2018] [wsgi:error] [pid 982] [\x1b[1;32mINFO\x1b[0m ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[Tue Sep 18 01:11:18.382900 2018] [wsgi:error] [pid 982] [\x1b[1;32mINFO\x1b[0m ] [Text ] Provider: sdl2
[Tue Sep 18 01:11:19.067466 2018] [wsgi:error] [pid 982] [\x1b[1;32mINFO\x1b[0m ] [Window ] Provider: egl_rpi
...
снова и снова с
[Tue Sep 18 01:11:20.520018 2018] [wsgi:error] [pid 977] Purge log fired. Analysing...
[Tue Sep 18 01:11:20.535182 2018] [wsgi:error] [pid 977] Purge 9 log files
[Tue Sep 18 01:11:20.535759 2018] [wsgi:error] [pid 977] Purge finished!
один раз.
"Нормальный" проект Django без сенсорного графического интерфейса действительно может работатьна сервере, так что это не моя проблема.Я думаю, что проблема в GUI.
Я также настроил .kivy/config.ini
для пользователя www-data
для работы с официальным 7-дюймовым сенсорным экраном Raspberry Pi. И я добавил файл .Xauthority
с соответствующимПеременные окружения (для XAUTHORITY
и DISPLAY
) в окружениях Apache.
Мои вопросы:
Я что-то пропустил?
Возможно ли это сделать?с Apache?
Существуют ли альтернативы Apache, которые работают с этой программной архитектурой и средами?
Имеет ли значение, если я использую prefork
, worker
или event
в качестве MPM?