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

Python/rq—如何将信息从调用者传递给工作者?,python,flask,redis,plotly-dash,python-rq,Python,Flask,Redis,Plotly Dash,Python Rq,我想使用rq在一个单独的工人身上运行任务,以从测量仪器收集数据。用户按下dash应用程序上的按钮将发出任务结束的信号。 问题是任务本身不知道何时终止,因为它无法访问dash应用程序的上下文 我已经使用meta将工作人员的信息传递回调用者,但是我可以将调用者的信息传递给工作人员吗 示例任务: 从rq导入获取当前作业 从时间导入时间 def模拟_测量() 作业=获取当前作业() t_开始=时间() #进行测量 t=[] i=[] job.meta['should_stop']=False#我想用这个

我想使用rq在一个单独的工人身上运行任务,以从测量仪器收集数据。用户按下dash应用程序上的按钮将发出任务结束的信号。 问题是任务本身不知道何时终止,因为它无法访问dash应用程序的上下文

我已经使用
meta
将工作人员的信息传递回调用者,但是我可以将调用者的信息传递给工作人员吗

示例任务:

从rq导入获取当前作业
从时间导入时间
def模拟_测量()
作业=获取当前作业()
t_开始=时间()
#进行测量
t=[]
i=[]
job.meta['should_stop']=False#我想用这个标签告诉作业停止
而不是job.meta['should_stop']:
t、 追加(time()-t\u start)
i、 追加(np.random.random())
job.meta['data']=(t,i)
job.save_meta()
睡眠(5)
打印(“作业完成”)
从控制台,我可以启动这样的作业

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

但是,尽管上面的命令返回时没有错误,但它们实际上不会更新
字典。

,因为您没有获取更新后的元但是,不要这样做 在调用者和工作者中调用save_meta和refresh将丢失数据


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

谢谢!为了澄清其他人是否有相同的问题,我最后在调用方使用了
queue.connection.set(job.key+b):should_stop',1,ex=30)
,在工作方使用了
connection.get(job.key+b):should_stop')
。@DougP。没错,
self.connection
self.key()
应该是
job.connectoin
job.key