9

我需要通过这些 un​​iq id 获取 Gearman 作业的状态,而不是通过打开的处理程序,正如我看到的每个地方所描述的那样

可能吗?在 python-gearman v. 2 中使用...

感谢您的帮助!

4

1 回答 1

6

不得不深入挖掘来解决这个问题,因为它没有在 python-gearman-API 中以友好的方式公开。但是,您可以通过自己创建适当的实例来解决GearmanJobGearmanJobRequest

这是一个小示例,说明如何执行此操作:

import gearman

client = gearman.GearmanClient(['localhost'])
result = client.submit_job('reverse', 'this is a string', background=True);

您想跟踪哪个服务器处理该作业(如果您有多个 Gearman 服务器处理任务),以及该任务的句柄。连接信息可通过result.job.connection(.gearman_host.gearman_port) 获得,而句柄可通过 获得result.job.handle

要检查当前正在运行的作业的状态,您可以创建一个GearmanClient,但只提供要查询当前状态的服务器:

client = gearman.GearmanClient(['localhost'])

# configure the job to request status for - the last four is not needed for Status requests.
j = gearman.job.GearmanJob(client.connection_list[0], result.job.handle, None, None, None, None)

# create a job request 
jr = gearman.job.GearmanJobRequest(j)
jr.state = 'CREATED'

# request the state from gearmand
res = client.get_job_status(jr)

# the res structure should now be filled with the status information about the task
print(str(res.status.numerator) + " / " + str(res.status.denominator))

希望这会有所帮助!

于 2011-10-03T11:47:30.577 回答