Мой REST API, написанный на Python, порождает процессы, выполнение которых занимает около 3 минут. Я сохраняю PID в глобальном массиве и настраиваю дополнительный метод проверки, который должен подтвердить, выполняется ли процесс еще или он завершен.
Единственные методы, которые я могу найти, это опросить подпроцесс (который я не имеют доступа к этому маршруту), или попробуйте убить процесс, чтобы увидеть, жив ли он. Есть ли простой способ получить бинарный ответ, если он все еще работает на основе PID, и если он успешно завершен, если нет?
from flask import Flask, jsonify, request, Response
from subprocess import Popen, PIPE
import os
app = Flask(__name__)
QUEUE_ID = 0
jobs = []
@app.route("/compile", methods=["POST"])
def compileFirmware():
f = request.files['file']
f.save(f.filename)
os.chdir("/opt/src/2.0.x")
process = Popen(['platformio', 'run', '-e', 'mega2560'], stdout=PIPE, stderr=PIPE, universal_newlines=True)
global QUEUE_ID
QUEUE_ID += 1
data = {'id':QUEUE_ID, 'pid':process.pid}
jobs.append(data)
output, errors = process.communicate()
print (output)
print (errors)
response = jsonify()
response.status_code = 202 #accepted
response.headers['location'] = '/queue/' + str(QUEUE_ID)
response.headers.add('Access-Control-Allow-Origin', '*')
return response
@app.route("/queue/<id>", methods=["GET"])
def getStatus(id):
#CHECK PID STATUS HERE
content = {'download_url': 'download.com'}
response = jsonify(content)
response.headers.add('Access-Control-Allow-Origin', '*')
return response
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8080)