我希望使用rq在单独的工作线程上运行任务,从测量仪器中收集数据。任务结束会由用户在dash应用程序上按下按钮来发出信号。问题是,任务本身无法确定何时终止,因为它无法访问dash应用程序的上下文。
我已经使用将信息从工作线程传递回调用者,但我能否将信息从调用者传递到工作线程?
示例任务:
然而,虽然上述命令没有出现错误,但实际上它们并未更新
我已经使用将信息从工作线程传递回调用者,但我能否将信息从调用者传递到工作线程?
示例任务:
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
字典。
queue.connection.set(job.key + b':should_stop', 1, ex=30)
,在工作者方使用了connection.get(job.key + b':should_stop')
。谢谢! - Doug P.self.connection
和self.key()
应该改为job.connection
和job.key
。 - duyue