日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gearman的安装与使用示例

發布時間:2024/2/28 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gearman的安装与使用示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一, gearman的安裝
1.1. gearman工作原理
Gearman 服務有很多要素使得它不僅僅是一種提交和共享工作的方式,
但是主要的系統只由三個組件組成:?
? ? gearmand 守護進程(server),
? ? 用于向 Gearman 服務提交請求的 client ,
? ? 執行實際工作的 worker。

其關系如下圖所示:?

Fig 1. gearm工作原理

Gearmand server執行一個簡單的功能,
即從client收集job請求并充當一個注冊器,
而worker可以在此提交關于它們支持的job和操作類型的信息,
這樣server實際上就充當了Client和Worker的中間角色。
Client將job直接丟給server,而server根據worker提交的信息,將這些job分發給worker來做,
worker完成后也可返回結果,server將結果傳回client。


舉個例子,
在一個公司里面,有老板1、老板2、老板3(client),
他們的任務就是出去喝酒唱歌拉項目(job),將拉來的項目直接交給公司的主管(server),
而主管并不親自來做這些項目,他將這些項目分給收手下的員工(worker)來做,
員工做完工作后,將結果交給主管,主管將結果報告給老板們即可。

1.2. gearman 的下載與安裝
它的下載與安裝分兩部分:
? ? Job Server(gearmand);?
? ? 和 Client & Worker APIs

而這每個部分又提供了很多種語言的實現,
? ?Job Server的實現有C,Java, Perl三種;
? ?Client&Worker API的實現語言更多,包括有C, shell, Perl, Nodejs, PHP,Python, Java, C#/.NET, GO, Lisp;?
? ?它還有數據庫的接口,支持的種類有: MySQL, PostgreSQL, Drizzle等?

另外,官網還介紹了一些可選配的工具,包括有:
. Gearman-Monitor(PHP)
? 使用PHP開發服務器監視工具,用來監測服務器的狀態
? Gearman-Monitor on GitHub (https://github.com/yugene/Gearman-Monitor)

. GearmanManager(PHP)
? 用來管理多個gearman woker的框架
? GearmanManager On GitHub(https://github.com/brianlmoon/GearmanManager)

. Multi-process Gearman Task Server Library(Python)
? GMTasks contains a simple multiprocessing server for Gearman workers,?
? designed for ease of configuration and maximum availability.
? GMTasks(https://github.com/ex-nerd/gmtasks)
??
本文使用的是C語言版的Job Server和Python版的 Client&Worker API;?

1.2.1 安裝server
要使用gearman,首先得安裝server,下載地址:
? ? http://gearman.org/download/。

下載源碼:
https://github.com/gearman/gearmand/releases
?
$ tar -zxvf gearmand-1.1.14
$ cd gearmand-1.1.14
$ ./configure
$ make
$ sudo make install

配置時,可能會報缺庫,需要自己手動安裝
1). libevent庫的安裝:
下載:
$ wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
在當前目錄下解壓安裝包:
$ tar -zxvf libevent-2.0.22-stable.tzr.gz
$ cd libevent-2.0.22-stable
配置安裝庫的目標路徑:
$ ./configure
編譯安裝libevent庫:
$ make
$ sudo make install

2). libuuid的安裝
$ sudo apt-get install uuid-dev

3). boostlib的安裝
$ sudo apt-get install uuid-dev libevent-dev libboost-all-dev libdrizzle-dev

當安裝完成后,可以啟動
gearmand,
啟動有很多參數選項,可以man gearmand來查看,主要的選項有:
-b, --backlog=BACKLOG ? ? ? Number of backlog connections for listen.?
-d, --daemon ? ? ? ? ? ? ? ?Daemon, detach and run in the background.?
-f, --file-descriptors=FDS ?Number of file descriptors to allow for the process ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? (total connections will be slightly less). Default is max allowed for user.?
-h, --help ? ? ? ? ? ? ? ? ?Print this help menu.?
-j, --job-retries=RETRIES ? Number of attempts to run the job before the job ?server removes it.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? This is helpful to ensure a bad ?job does not crash all available workers.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? Default ?is no limit.?
-l, --log-file=FILE ? ? ? ? 日志輸出文件;Log file to write errors and information to.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? Turning this option on also forces the first ?verbose level to be enabled.?
-L, --listen=ADDRESS ? ? ? ?Address the server should listen on. Default is ?INADDR_ANY.?
-p, --port=PORT ? ? ? ? ? ? Port the server should listen on.?
-P, --pid-file=FILE ? ? ? ? 以進程號為標識的文件寫出;File to write process ID out to.?
-r, --protocol=PROTOCOL ? ? Load protocol module.?
-R, --round-robin ? ? ? ? ? Assign work in round-robin order per ?workerconnection.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? The default is to assign work in ?the order of functions added by the worker.?
-q, --queue-type=QUEUE ? ? ?Persistent queue type to use.?
-t, --threads=THREADS ? ? ? Number of I/O threads to use. Default=0.?
-u, --user=USER ? ? ? ? ? ? Switch to given user after startup.?
-v, --verbose ? ? ? ? ? ? ? Increase verbosity level by one.?
-V, --version ? ? ? ? ? ? ? Display the version of gearmand and exit.?
-w, --worker-wakeup=WORKERS Number of workers to wakeup for each job received. ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? The default is to wakeup all available workers.


啟動gearmand:
sudo gearmand --pid-file=/var/run/gearmand/gearmand.pid --daemon --log-file=/var/log/gearman.log ?
若提示沒有/var/log/gearman.log這個文件的話,自己新建一個就可以了。

1.2.2 Client & Worker API
gearman提供了兩種不同的Python API, 一個是 libgearman C庫的封裝,另一個則是純粹的Python API.
純Python的安裝:
A pure-Python API that can be found on PyPI as “gearman”, and can be installed with “easy_install gearman”.
$ easy_install gearman

$ pip install gearman

C庫的Python封裝的安裝:
. python-gearman(http://pypi.python.org/pypi/gearman/)

二,應用示例
2.1 單機版消息通信示例
worker.py
?

  • #!/usr/bin/env python2.7
  • #?-*-?coding:utf-8?-*-
  • #
  • ?
  • import?os
  • import?gearman
  • import?math
  • ?
  • class?CustomGearmanWorker(gearman.GearmanWorker):
  • ????def?on_job_execute(self,?current_job):
  • ????????print?"Job started"
  • ????????return?super(CustomGearmanWorker,?self).on_job_execute(current_job)
  • ?
  • def?task_callback(gearman_worker,?job):
  • ????print?job.data
  • ????return?job.data
  • ?
  • ?
  • if?__name__?==?'__main__':
  • ????new_worker?=?CustomGearmanWorker(['localhost:4730'])
  • ????new_worker.register_task("echo",?task_callback)
  • ????new_worker.work()

  • client.py

  • #!/usr/bin/env python2.7
  • #?-*-?coding:utf-8?-*-
  • #
  • ?
  • from?gearman?import?GearmanClient
  • ?
  • ?
  • new_client?=?GearmanClient(['localhost:4730'])
  • current_request?=?new_client.submit_job('echo',?'foo')
  • new_result?=?current_request.result
  • print?new_result

  • 運行gearman server:
    $ gearmand ?--daemon ?--listen=127.0.0.1


    啟動worker程序:python worker.py
    啟動client程序:python client.py


    2.2 多機版消息通信示例
    worker.py
    ?

  • #!/usr/bin/env python2.7
  • #?-*-?coding:utf-8?-*-
  • #
  • ?
  • import?os
  • import?gearman
  • import?math
  • ?
  • ?
  • class?CustomGearmanWorker(gearman.GearmanWorker):
  • def?on_job_execute(self,?current_job):
  • print?"Job started"
  • return?super(CustomGearmanWorker,?self).on_job_execute(current_job)
  • ?
  • ?
  • def?task_callback(gearman_worker,?job):
  • print?job.data
  • return?job.data
  • ?
  • ?
  • if?__name__?==?'__main__':
  • new_worker?=?CustomGearmanWorker(['10.11.31.86:4730'])
  • new_worker.register_task("echo",?task_callback)
  • new_worker.work()

  • client.py

    ?

  • #!/usr/bin/env python2.7
  • #?-*-?coding:utf-8?-*-
  • #
  • ?
  • from?gearman?import?GearmanClient
  • ?
  • ?
  • new_client?=?GearmanClient(['10.11.31.86:4730'])
  • current_request?=?new_client.submit_job('echo',?'foo')
  • new_result?=?current_request.result
  • print?new_result

  • 在一臺服務器上啟動服務端:
    $ gearmand --daemon --listen=10.11.31.86

    可以在多臺不同的服務器上啟動worker:
    $ python worker.py

    再啟動client發布命令:
    $ python client.py

    總結

    以上是生活随笔為你收集整理的gearman的安装与使用示例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。