Gearman是一个分布式任务调度框架,对于Gearman的介绍已有很多,本文主要记录下最近是用Gearman的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)
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扩展。
来源:oschina
链接:https://my.oschina.net/u/159979/blog/131736