Возврат флакона перед выполнением перезагрузки

По причинам, которые я хочу, чтобы вызвать перезагрузку Raspberry Pi с помощью API REST.

Мой REST API закодирован в python flask как это:

from flask import Flask
from flask import jsonify
import subprocess

app = Flask(__name__)

@app.route('/api/reboot')
def reboot():
    subprocess.call("/sbin/reboot")
    return jsonify(triggered='reboot')

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

код работает отлично. Но из-за перезагрузки возврат не будет отправлен (поскольку система, очевидно, перезагружается).

Есть ли способ вызвать перезагрузку какой-то асинхронный с задержкой в ​​пару миллисекунд, который позволяет вернуть некоторое значение (в моем случае просто пользовательский "ack") до фактической перезагрузки?

1 ответ

Решение

Попробуйте использовать threading.Timer:

Например:

from flask import Flask
from flask import jsonify
import subprocess
import threading

app = Flask(__name__)

def _reboot():
    subprocess.call("/sbin/reboot")

@app.route('/api/reboot')
def reboot():
    t = threading.Timer(1, _reboot)
    t.start()
    return jsonify(triggered='reboot')

if __name__ == '__main__':
    app.run(debug=True,host="0.0.0.0")
Другие вопросы по тегам