Как получить статус Gearman Jobs по их уникальному идентификатору? - PullRequest
9 голосов
/ 08 августа 2011

Мне нужно получить статус заданий Gearman по этим уникальным идентификаторам, а не по открытым обработчикам, как описано в каждом месте, которое я видел

Возможно ли это? использование в python-gearman v. 2 ...

Спасибо за помощь!

1 Ответ

6 голосов
/ 03 октября 2011

Пришлось немало покопаться, чтобы решить эту проблему, так как она не раскрывается дружественным образом в python-gearman-API.Однако вы можете решить эту проблему, создав соответствующие экземпляры GearmanJob и GearmanJobRequest самостоятельно.

Вот небольшой пример того, как вы можете это сделать:

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))

Надеюсь, это поможет!

...