Gearman是一个分布式任务调度框架,对于Gearman的介绍已有不少,本文主要记录下最近是用Gearman的python接口时遇到的小问题 python
python-Gearman目前版本2.0.1(http://www.gearman.org/python_client_library),从1.x到2.x的变化很多,相关的区别文档中有详细说明(http://pythonhosted.org/gearman/),下文对其中部分作下翻译性的介绍。 框架
Gearman worker:worker端,向server注册工做接口并执行具体任务。GearmanWorker类描述了woker的工做。
例:(来自文档)
gm_worker = gearman.GearmanWorker(['localhost:4730']) 异步
#反转字符串
def task_listener_reverse(gearman_worker, gearman_job):
return reversed(gearman_job.data)
#设置id是可选的
gm_worker.set_client_id('your_worker_client_id_name')
gm_worker.register_task('reverse', task_listener_reverse)
#进入工做循环
gm_worker.work()
分布式
流程:直接建立一个worker对象,定义一个工做函数,设置clientID,并将工做函数注册至worker中,最后启动worker。
GearmanWorker默认只能处理字节流字符串,若参数是python对象(如字典),须要制定一个encoder(从gearman.DataEncoder派生)来处理。
能够直接从GearmanWorker建立worker,亦能够从GearmanWorker派生,从而本身处理各类工做状态和异常,能够继承4个方法:on_job_execute、on_job_exception、on_job_complete、after_poll。 函数
Gearman client:client端,GearmanClient类给出了定义。
例:(来自文档)
gm_client = gearman.GearmanClient(['localhost:4730', 'otherhost:4730'])
# submit_job函数可携带任务属性的各类参数(优先级、同步异步等),具体能够参看GearmanJobRequest
completed_job_request = gm_client.submit_job("task_name", "arbitrary binary data")
#check_request_status(completed_job_request) spa
client端使用很方便,除submit_job方法外,亦能够使用submit_multiple_jobs、submit_multiple_requests提交请求。client能够使用wait_until_jobs_accepted和wait_until_jobs_completed等待任务状态的变动,亦能够使用get_job_status、get_job_statuses得到任务状态。一样,client模块在处理非字节流字符串时也须要使用encoder扩展。
翻译