Python3 Gearman 使用
網上很多資料對python gearman的使用都是用的gearman模塊,然而這個模塊僅支持python2.x ,使用python3的pip install安裝,會因為不支持的python2語法報錯,根本無法使用。 想用python3的資料特別少。
安裝
首先先安裝gearman:sudo apt-get install gearman libgearman-dev
安裝python3對應的gearman模塊
安裝:pip install python3-gearman
如果系統里有多個版本的python,注意使用python3 -m pip install python3-gearman 避免安裝到別的版本里去。
最簡示例:
server端:
import python3_gearman gm_worker = python3_gearman.GearmanWorker(['localhost:4730'])# 定義收到消息的處理函數,返回值必須是個byte string。 def task_listener(gearman_worker, gearman_job):print(gearman_job.data)return "" # 注冊消息處理,msg為自定義的,和client保持一致 gm_worker.register_task('msg', task_listener) # 啟動監聽 gm_worker.work()client端:
import python3_gearman gm_client = python3_gearman.GearmanClient(['localhost:4730', 'otherhost:4730']) gm_client.submit_job("msg", "hello world") # 發送消息,msg是自定義的,要和server端協商保持一致先啟動server,然后運行client。成功的話,client非阻塞,每次運行,server端會打印出對應的字符串。
進階實例:
- 兩端發送和接收解析相對復雜的json數據:# server端:將上面的tesk_listener函數改為如下即可: j = json.loads(gearman_job.data) # client端:用json.dumps將一個復雜的字典傳入,代替原來的"hello world即可"
- 客戶端對發送結果進行校驗
submit_job的返回值是一個結果定值,可以通過校驗這個值來判斷發送是否成功:import python3_gearman from python3_gearman.job import JOB_UNKNOWN def check_request_status(job_request):if job_request.complete:print ("Job %s finished! Result: %s - %s" % (job_request.job.unique, job_request.state, job_request.result))elif job_request.timed_out:print ("Job %s timed out!" % job_request.unique)elif job_request.state == JOB_UNKNOWN:print ("Job %s connection failed!" % job_request.unique)gm_client = python3_gearman.GearmanClient(['localhost:4730', 'otherhost:4730'])submitted_job_request = gm_client.submit_job("msg", "hello world")check_request_status(submitted_job_request) - 設置數據高優先級,設置發送方式為后臺非阻塞模式
可以通過submit_job的參數進行配置,priority=python3_gearman.PRIORITY_HIGH指定高優先級, background=True指定通過后臺非阻塞的方式發送。submitted_job_request = gm_client.submit_job("msg", "hello world", priority=python3_gearman.PRIORITY_HIGH, background=True)
完整代碼:
server端:
client端:
import python3_gearman from python3_gearman.job import JOB_UNKNOWN import jsondef check_request_status(job_request):if job_request.complete:print ("Job %s finished! Result: %s - %s" % (job_request.job.unique, job_request.state, job_request.result))elif job_request.timed_out:print ("Job %s timed out!" % job_request.unique)elif job_request.state == JOB_UNKNOWN:print ("Job %s connection failed!" % job_request.unique)gm_client = python3_gearman.GearmanClient(['localhost:4730', 'otherhost:4730'])msg_dict = {"name":"threedog","age":18,"class":{"name":"一班","number":1} }submitted_job_request = gm_client.submit_job("msg", json.dumps(msg_dict), priority=python3_gearman.PRIORITY_HIGH, background=False)check_request_status(submitted_job_request)文檔
對于任何框架和工具,文檔都是非常重要的一部分。比如上面的例子中,我們想知道除了JOB_UNKNOWN還有什么其他的狀態?除了PRIORITY_HIGH還有什么可選的優先級。這些都需要借助文檔。
然而python3-gearman這個小項目網上資料很少,而且沒有找到官網文檔的地址。
好在,潛心研究之下還是找到了官方提供的文檔所在:這個項目是托管在github上的:https://github.com/josiahmwalton/python3-gearman 點開這個項目你會發現有自帶的docs
只不過這個里面放的并不是html或者md格式的文檔,而是一些rst后綴的文本文件和一個Makefile。這是一種很常用的文檔生成的格式,rst就是文檔源格式,便于書寫,但是可讀性較差。可以通過在這個目錄下運行執行make +格式的方式,生成指定格式的文檔。
操作方法如下:
# 安裝工具 sudo apt-get install python3-sphinx # 文檔下載 git clone https://github.com/josiahmwalton/python3-gearman.git # 文檔生成 cd python3-gearman/docs/ make html # 指定為html格式,直接輸入make會提示有哪些可選的格式完成后會在docs目錄下生成一個_build目錄,里面包含詳細的官方文檔和實例,我上面的示例代碼也是從官方文檔的實例中抽絲剝繭扒出來的:
總結
以上是生活随笔為你收集整理的Python3 Gearman 使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5-audio标签不能自动播放的
- 下一篇: ipad文件夹管理