Я пытаюсь изменить задачи, доступные на работнике python-gearman во время его рабочего цикла.Моя причина для этого - дать мне немного контроля над моими рабочими процессами и позволить им перезагрузиться из базы данных.Мне нужно, чтобы каждый работник перезагружался через регулярные промежутки времени, но я не хочу просто убивать процессы, и я хочу, чтобы служба была постоянно доступна, что означает, что мне нужно перезагружать пакетами.Таким образом, у меня будет 4 перезагрузки рабочих, в то время как еще 4 рабочих доступны для обработки, а затем перезагрузите следующие 4 рабочих.
Процесс:
- Запустите процесс перезагрузки 4 раза.
- отменить регистрацию процесса
reload
- перезагрузить набор данных
- зарегистрировать
finishReload
задачу - return
- Повторяйте шаг 1, пока не останется рабочих с зарегистрированной задачей
reload
. - Запустите задачу
finishReload
(1), пока не останется рабочих с доступной задачей finishReload
.
(1) задача finishReload отменяет регистрацию задачи finishReload
, регистрирует задачу reload
, а затем возвращает ее.
Теперь проблема, с которой я сталкиваюсь, заключается в том, что задание завершается неудачно, когда яизменить задачи, доступные для рабочего процесса.Там нет сообщений об ошибках или исключений, просто «ОШИБКА» в журнале передач.Вот быстрая программа, которая воспроизводит проблему.
РАБОЧИЙ
import gearman
def reversify(gmWorker, gmJob):
return "".join(gmJob.data[::-1])
def strcount(gmWorker, gmJob):
gmWorker.unregister_task('reversify') # problem line
return str(len(gmJob.data))
worker = gearman.GearmanWorker(['localhost:4730'])
worker.register_task('reversify', reversify)
worker.register_task('strcount', strcount)
while True:
worker.work()
КЛИЕНТ
import gearman
client = gearman.GearmanClient(['localhost:4730'])
a = client.submit_job('reversify', 'spam and eggs')
print a.result
>>> sgge dna maps
a = client.submit_job('strcount', 'spam and eggs')
...
Пожалуйста, дайте мне знать, если есть что-то, что я могу объяснить.
РЕДАКТИРОВАТЬ: Я знаю, что кто-то попросит посмотреть журнал, который я упомянул.Я также отправил этот вопрос в группу gearman в Google, и там есть журнал .