Как получить статус Gearman Jobs по их уникальному идентификатору?

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

Является ли это возможным? используя в python-gearman v. 2...

Спасибо за содействие!

1 ответ

Пришлось немало покопаться, чтобы решить эту проблему, так как она не очень дружелюбно представлена ​​в 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))

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

Другие вопросы по тегам