Как получить статус 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))
Надеюсь, это поможет!