Nano Hash - криптовалюты, майнинг, программирование

Веб-приложение (Flask/Gunicorn) имеет ограниченную функциональность при работе через Supervisor.

У меня есть функция, связанная с приложением для умного дома, над которым я сейчас работаю, и с которой у меня возникают проблемы в «производственной» среде.

requirements:
    Flask
    gunicorn
    python-mpv

Последний представляет собой оболочку Python для аудиоплеера mpv.

У меня есть некоторые функции в моем приложении Flask, например:

STATION_URLS = {
    'heart 80s': 'http://media-ice.musicradio.com/Heart80sMP3',
    'el sol': 'https://playerservices.streamtheworld.com/api/livestream-redirect/EL_SOL_BOGAAC.aac'
}

stream = mpv.MPV()

def kill_station():
    global stream
    stream.stop()

def play_radio_station(station):
    global stream
    print(f'playing {station}')
    stream.play(STATION_URLS[station])
    
@app.route('/music', methods=['GET', 'POST'])
def music():
    if request.method == 'POST':
        if request.get_json() and request.get_json().get('kill'):
            kill_station()
            return 'Success', 200
        play_radio_station(request.get_json()['station'])
        return 'Success', 200
    return render_template('radio.html')

Проблема, с которой я сталкиваюсь и на которую не могу найти ответ, заключается в том, почему это представление/функция отлично работает при работе на переднем плане либо с сервером разработки Flask (Werkzeug), либо с Gunicorn, но когда я запускаю его через Supervisor, хотя само приложение в основном работает нормально, оно не может взаимодействовать с mpv, и я не получаю никаких соответствующих журналов ошибок от Supervisor или Gunicorn. Я попробовал последнее с различными вариантами, относящимися к количеству рабочих и рабочих классов, просто чтобы убедиться. Конфигурация моего супервайзера выглядит следующим образом:

[program:smarthome]
directory=/home/me/SmartHome
command=/home/me/SmartHome/gunicorn.sh
user=me
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/smarthome/smarthome.err.log
stdout_logfile=/var/log/smarthome/smarthome.out.log

Как видите, я попытался обойти проблему, запустив сервер Gunicorn с помощью скрипта bash, но без особого удовольствия (дикий удар в темноте, который я нашел здесь). Сценарий bash (и команда Gunicorn):

#!/bin/sh
exec /home/me/.local/bin/gunicorn -c gunicorn.conf.py smarthome2.smarthome_server:app

и мой конфиг Gunicorn выглядит так:

from smarthome2.smarthome_server import heating_init

bind = '0.0.0.0:8080'
workers = 3
worker_class = 'sync'     # I have also tried 'gthread' here
loglevel = 'info'


def on_starting(server):
    heating_init()

Приложение работает на Raspberry Pi 3B, а НЕ за другим сервером wsgi (Apache2/nginx), а просто через локальную сеть. Pi подключен к динамику Bluetooth, и команды mpv отлично работают из командной строки (и, как упоминалось выше, при работе без Supervisor).

Мои подозрения (возможно, необоснованные) заключаются в том, что пользователь/группа супервизора не может получить доступ ни к mpv, ни к устройству Bluetooth.

Может ли кто-нибудь помочь подтвердить/опровергнуть мои подозрения и указать мне правильное направление для исправления?


Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..