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