Как лучше всего скрипту Pyhton взаимодействовать с сервером Python Flask, который транспортирует контент клиенту? - PullRequest
0 голосов
/ 02 августа 2020

Следующий сценарий:

У меня Raspberry Pi работает как сервер. В настоящее время я использую сценарий Pyhton с Flask, и я также могу получить доступ к Raspberry Pi с моего P C. (Сервер flask запускает приложение для реагирования.)

Но функция должна быть расширена. Это должно выглядеть так:

2nd Python скрипт выполняется все время. Этот Python скрипт каждую секунду извлекает данные из внешнего API и обрабатывает их. Если выполняются определенные условия, данные должны быть обработаны, а затем данные должны быть переданы на сервер Pyhton Flask. Затем сервер Flask пересылает данные на веб-сайт, работающий на компьютере.

Как или какой метод лучше всего программировать это «межпроцессное взаимодействие». Есть ли библиотеки? Я попробовал Celery, но потом он запускает мой второй скрипт Pyhton всякий раз, когда я хочу получить доступ к внешнему API, поэтому я не знаю, правильный ли это выбор.

Какой еще подход был бы лучшим? Поток? Прямое межпроцессное взаимодействие?

Если важно, мое серверное приложение пока выглядит так:

from gevent import monkey
from flask import Flask, render_template
from flask_socketio import SocketIO
monkey.patch_all()

app = Flask(__name__, template_folder='./build', static_folder='./build/static')
socket_io = SocketIO(app)


@app.route('/')
def main():
    return render_template('index.html')


@socket_io.on('fromFrontend')
def handleInput(input):
    print('Input from Frontend: ' + input)
    send_time()


@socket_io.on('time')
def send_time():
    socket_io.emit('time', {'returnTime': "some time"})


if __name__ == '__main__':
    socket_io.run(app, host='0.0.0.0', port=5000, debug=True)

1 Ответ

0 голосов
/ 02 августа 2020

Ну, я нашел решение моей конкретной c проблемы, я реализовал его с помощью следующего потока:

import gevent.monkey
gevent.monkey.patch_all()


from flask import Flask, render_template
from flask_socketio import SocketIO
import time
import requests
from threading import Thread


app = Flask(__name__, template_folder='./build', static_folder='./build/static')
socket_io = SocketIO(app)


@app.route('/')
def main():
    thread = Thread(target=backgroundTask)
    thread.daemon = True
    thread.start()
    return render_template('index.html')


@socket_io.on('fromFrontend')
def handleInput(input):
    print('Input from Frontend: ' + input)

@socket_io.on('time')
def send_time():
    socket_io.emit('time', {'returnTime': 'hi frontend'})


def backgroundTask():
    # do something here
    # access socket to push some data
    socket_io.emit('time', {'returnTime': "some time"})


if __name__ == '__main__':
    socket_io.run(app, host='0.0.0.0', port=5000, debug=True)

...