Я хотел бы запустить новых рабочих Redis (как новый поток) из интерфейса Flask.
Для этого у меня есть следующая функция (utils.py):
def start_worker():
listen = ['default']
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
conn = redis.from_url(redis_url)
with Connection(conn):
print('STARTING WORKER..')
worker = Worker(Queue('default'), connection=conn, name='foo2')
worker.work()
и следующий вызов вways.py:
#from threading import Thread #import threading # for starting worker as new thread)
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=2)
@app.route('/')
@app.route('/index', methods=['GET','POST'])
@login_required
def index():
form = WorkerForm()
if form.validate_on_submit():
#w = Thread(target=utils.start_worker)
#w.daemon = True
#w.start()
executor.submit(utils.start_worker)
return redirect(url_for('index'))
Теперь, когда я запускаю функцию start_worker()
вручную из консоли, я вижу работника, регистрирующегося.
При вызове функции черезКолба, я вижу брошенный комментарий («НАЧИНАЮЩИЙ РАБОТНИК ..»).Но ни один работник не регистрируется.
Изначально я хотел запустить его как обычный поток (закомментированный код), но это приводит к ValueError: signal only works in main thread
.
Чего мне здесь не хватает?Спасибо