Я хочу использовать rq для запуска задач на отдельном работнике для сбора данных с измерительного прибора. Пользователь будет нажимать кнопку в приложении Dash о завершении задачи.
Проблема заключается в том, что сама задача не знает, когда завершить свою работу, поскольку у нее нет доступа к контексту dash-приложения.
Я уже использую meta
для передачи информации от работника обратно вызывающей стороне, но могу ли я передать информацию от звонящего работнику?
Пример задачи:
from rq import get_current_job
from time import time
def mock_measurement():
job = get_current_job()
t_start = time()
# Run the measurement
t = []
i = []
job.meta['should_stop'] = False # I want to use this tag to tell the job to stop
while not job.meta['should_stop']:
t.append(time() - t_start)
i.append(np.random.random())
job.meta['data'] = (t, i)
job.save_meta()
sleep(5)
print("Job Finished")
С консоли я могу начать работу как таковую
queue = rq.Queue('test-app', connection=Redis('localhost', 6379))
job = queue.enqueue('tasks.mock_measurement')
и я хотел бы иметь возможность сделать это из консоли, чтобы указать работнику, что он может прекратить работу:
job.meta['should_stop'] = True
job.save_meta()
job.refresh
Однако, хотя приведенные выше команды возвращаются без ошибок, они фактически не обновляют словарь meta
.