我正在尝试更改 python-gearman 工人在其工作周期内可用的任务。我这样做的原因是允许我对我的工作进程进行一点控制,并允许它们从数据库中重新加载。我需要每个工作人员定期重新加载,但我不想简单地终止进程,我希望服务始终可用,这意味着我必须分批重新加载。所以我会让 4 名工人重新加载,而另外 4 名工人可以处理,然后重新加载接下来的 4 名工人。
过程:
- 开始重新加载过程 4 次。
- 注销
reload
进程 - 重新加载数据集
- 注册一个
finishReload
任务 - 返回
- 注销
- 重复步骤 1,直到没有
reload
注册任务的工作人员。 - 开始
finishReload
(1) 任务,直到没有finishReload
可用任务的工人。
(1)finishReload任务注销finishReload
任务并注册reload
任务然后返回。
现在,我遇到的问题是,当我更改工作进程可用的任务时,作业会失败。没有错误消息或异常,gearmand 日志中只有一个“错误”。这是一个复制问题的快速程序。
工人
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')
...
请让我知道是否有任何我可以解释的事情。
编辑:我知道有人会要求查看我提到的日志。我也将这个问题发布到了 Google 上的 gearman 组,并且那里有日志。