我有一个基于Web的脚本,它在Gearman中创建后台作业(执行SSH命令),这很成功。但是,当我尝试在后续Web请求中检索作业的状态时,我也无法做到。
我的创造工作看起来也很相似:
import gearman
gm = gearman.GearmanClient( ['127.0.0.1'] )
job = gm.submit_job( 'ssh_execute', 'shell-command', background = True )
从此我可以获得作业handle
和unique
ID,这些ID在请求之间传递。这很成功,工作就完成了。
从谷歌搜索和堆栈溢出,获得工作状态的建议是:
import gearman
gm = gearman.GearmanClient( ['127.0.0.1'] )
job = gearman.job.GearmanJob( gm, 'handle', 'ssh_execute', 'unqiue id', None )
req = gearman.job.GearmanJobRequest( job )
然而,此操作失败,并且无法检索有关作业的任何信息(即状态始终为UNKNOWN
)。来自job
和req
的示例对象:
<GearmanJob connection/handle=(<gearman.client.GearmanClient object at 0x10f42db50>, 'H:proxy:1'), task=ssh_execute, unique=ce96e33721d5f3ef5394502b8c6621fa, data=None>
<GearmanJobRequest task='ssh_execute', unique='ce96e33721d5f3ef5394502b8c6621fa', priority=None, background=True, state='UNKNOWN', timed_out=False>
我在Ubuntu 12.04上使用Yelp Gearman库和gearman-job-server
0.27。