Я хочу создать несколько потоков, и каждый из них должен создать приложение фляги. Я не уверен, как это сделать, но вот что у меня есть:
app = Flask(__name__)
app.url_map.strict_slashes = False
@app.route('/api/v1/something/<string:FirstArgument>/<string:SecondArgument>/', methods=['POST'])
def do_it(FirstArgument, SecondArgument):
request_str = request.get_data().decode('utf-8').strip()
response = somefunction(mydata.state, request_str)
return response, 200
def run_app(this_port, mydata):
currentThread = threading.current_thread()
mydata.state = some_function_that_returns_6GB_of_data()
app.run(host='0.0.0.0',port=this_port)
if __name__ == '__main__':
mydata = threading.local()
thread1 = Thread(target=run_app, args=(4100, mydata,))
#thread2 = Thread(target=run_app, args=(4101,mydata,))
thread1.start()
#thread2.start()
На данный момент я хочу протестировать только один поток. И я не знаю, как передать mydata.state в do_it. Если я добавлю новый аргумент (def do_it (FirstArgument, SecondArgument, mydata.state)), тогда Flask скажет, что хочет получить эту переменную из app.route. Как я могу передать эти данные в функцию do_it?
И еще один вопрос. Эта программа передаст N экземпляров состояния в N потоков на N портах? Или я должен сделать что-то вроде этого:
def do_it(FirstArgument, SecondArgument):
request_str = request.get_data().decode('utf-8').strip()
response = somefunction(mydata.state[threading.get_ident()], request_str)
return response, 200
def run_app(this_port, mydata):
currentThread = threading.current_thread()
mydata.state[threading.get_ident()] = some_function_that_returns_6GB_of_data()
app.run(host='0.0.0.0',port=this_port)