Вот код того, что я пытаюсь реализовать
from flask import Flask, request, jsonify
import json
import pythoncom
import win32com.client
from win32com.client import Dispatch
xl = None
xl = win32com.client.Dispatch("Excel.Application")
app = Flask(__name__)
@app.route("/check", methods=['POST'])
def check():
pythoncom.CoInitialize()
if request.method == 'POST':
data = request.get_json()
fname = data['fname']
phName = data['PH_Name']
liName = data['LI_NAME']
ppm = data['PPM']
policyTerm = data['Policy_Term']
sumAssured = data['Sum_Assured']
wb = None
if xl :
wb = xl.Workbooks.Open(fname)
inp_sheet = wb.Sheets["Inputs"]
#read data from sheet
data = inp_sheet.Range('D8').Value
wb.Close(False)
xl.Quit()
return (data)
if __name__ == '__main__':
app.run(threaded=True, port=5001, debug=True)
Проблема в том, что win32com создает новые потоки всякий раз, когда функция flask используется для открытия книги, и, следовательно, требует, чтобы маршал объекта Dispatcher поток, чтобы передать его функции. Как мне сделать это для вызова API?
Я нашел несколько предложений, используя CoMarshalInterThreadInterfaceInStream и CoGetInterfaceAndReleaseStream, но они не запускаются, когда к API делается несколько параллельных вызовов.