【发布时间】:2011-03-19 14:54:53
【问题描述】:
我正在尝试更改 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 小组,log is available there。
【问题讨论】:
标签: python gearman python-gearman