Gearman Python接口使用

☆樱花仙子☆ 提交于 2019-12-02 03:51:59

    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扩展。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!