Как передать переменную в функцию Flask при использовании потоков? - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу создать несколько потоков, и каждый из них должен создать приложение фляги. Я не уверен, как это сделать, но вот что у меня есть:

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)
...