gpt4 book ai didi

Python/rq - 如何将信息从调用者传递给工作人员?

转载 作者:IT王子 更新时间:2023-10-29 06:04:54 26 4
gpt4 key购买 nike

我想使用 rq 在单独的 worker 上运行任务以从测量仪器收集数据。用户按下 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 字典。

最佳答案

因为您没有获取更新后的元数据。 但是,不要这样做!!在 caller 和 worker 中调用 save_meta 和 refresh 会丢失数据。

相反,使用 job.connection.set(job + ':should_stop', 1, ex=300) 设置标志,并使用 job.connection.get(job + ' :should_stop') 检查是否设置了标志。

关于Python/rq - 如何将信息从调用者传递给工作人员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com