Dou*_* P. 5 python redis flask python-rq plotly-dash
我想使用 rq 在单独的工作人员上运行任务,以从测量仪器收集数据。用户按下仪表板应用程序上的按钮将发出任务结束的信号。问题是任务本身不知道何时终止,因为它无权访问 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")
Run Code Online (Sandbox Code Playgroud)
从控制台,我可以开始这样的工作
queue = rq.Queue('test-app', connection=Redis('localhost', 6379))
job = queue.enqueue('tasks.mock_measurement')
Run Code Online (Sandbox Code Playgroud)
我希望能够从控制台执行此操作,以向工作人员表明它可以停止运行:
job.meta['should_stop'] = True
job.save_meta()
job.refresh
Run Code Online (Sandbox Code Playgroud)
然而,虽然上面的命令没有错误地返回,但它们实际上并没有更新字典meta。
因为你没有获取更新的元。但是,不要这样做! 在调用方和工作线程中调用 save_meta 和刷新将丢失数据。
相反,用于job.connection.set(job + ':should_stop', 1, ex=300)设置标志,并用于job.connection.get(job + ':should_stop')检查标志是否已设置。
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |