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擴展。
翻譯