#python #flask
#python #flask
Вопрос:
Мне нужно выполнить вычисление в режиме повышенной нагрузки, и из-за тайм-аута шлюза я хочу запустить вычисление в фоновом потоке.
Я использовал python threading, но он не работает.
import time
import threading
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
def heavy_func():
time.sleep(20)
print('Hi!')
@app.route('/', methods=['GET'])
def get_method():
threading.Thread(target=heavy_func()).start()
return 'hello!'
if __name__ == '__main__':
app.run()
он работает синхронно, а не асинхронно, как я хочу
Ответ №1:
Используйте thread.daemon следующим образом.
import time
import threading
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
def heavy_func():
time.sleep(20)
print('Hi!')
@app.route('/', methods=['GET'])
def get_method():
thread = threading.Thread(target=heavy_func)
thread.daemon = True # Daemonize
thread.start()
return "work is in progress"
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True, threaded=True),
🤓
Ответ №2:
Существует несколько способов запуска асинхронного потока в Flask. Я написал небольшую статью об этом https://smirnov-am.github.io/background-jobs-with-flask
Комментарии:
1. не удается установить uWSGI в Windows
2. поэтому я не могу проверить это на своем локальном компьютере
3. разве мы не должны использовать app.app_context().push() в tasks.py ?