一, 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

  1. #!/usr/bin/env python2.7
  2. # -*- coding:utf-8 -*-
  3. #
  4. import os
  5. import gearman
  6. import math
  7. class CustomGearmanWorker(gearman.GearmanWorker):
  8. def on_job_execute(self, current_job):
  9. print "Job started"
  10. return super(CustomGearmanWorker, self).on_job_execute(current_job)
  11. def task_callback(gearman_worker, job):
  12. print job.data
  13. return job.data
  14. if __name__ == '__main__':
  15. new_worker = CustomGearmanWorker(['localhost:4730'])
  16. new_worker.register_task("echo", task_callback)
  17. new_worker.work()

client.py

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

运行gearman server:
$ gearmand  --daemon  --listen=127.0.0.1

启动worker程序:python worker.py
启动client程序:python client.py

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

  1. #!/usr/bin/env python2.7
  2. # -*- coding:utf-8 -*-
  3. #
  4. import os
  5. import gearman
  6. import math
  7. class CustomGearmanWorker(gearman.GearmanWorker):
  8. def on_job_execute(self, current_job):
  9. print "Job started"
  10. return super(CustomGearmanWorker, self).on_job_execute(current_job)
  11. def task_callback(gearman_worker, job):
  12. print job.data
  13. return job.data
  14. if __name__ == '__main__':
  15. new_worker = CustomGearmanWorker(['10.11.31.86:4730'])
  16. new_worker.register_task("echo", task_callback)
  17. new_worker.work()

client.py

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

在一台服务器上启动服务端:
$ gearmand --daemon --listen=10.11.31.86

可以在多台不同的服务器上启动worker:
$ python worker.py

再启动client发布命令:
$ python client.py

gearman的安装与使用示例相关推荐

  1. Gearman的安装和使用

    首发于 樊浩柏科学院 Gearman 是一个分布式任务分发系统,通过程序调用(API,跨语言)分布式地把工作委派给更适合做某项工作的机器,且这些机器可以以并发的.负载均衡的形式来共同完成某项工作.当计 ...

  2. Centos7/8中Gearman的安装与使用

    Gearman的安装 Gearman的官网是http://gearman.org/ 1.gearman工作原理 Gearman 服务有很多要素使得它不仅仅是一种提交和共享工作的方式, 但是主要的系统只 ...

  3. 爬虫之 lxml模块的安装与使用示例

    爬虫之 lxml模块的安装与使用示例 lxml模块是一个第三方模块,安装之后使用 1.1 lxml模块的安装 对发送请求获取的xml或html形式的响应内容进行提取 pip/pip3 install ...

  4. (转)Thrift在Windows及Linux平台下的安装和使用示例

    转载自Thrift在Windows及Linux平台下的安装和使用示例 thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的RPC(远程服务调用)框架 ...

  5. c++ fmt 库安装和使用示例、clion配置

    安装 git clone  https://github.com/fmtlib/fmt.git make . mkae  &&  make install CLion使用 使用和安装存 ...

  6. MapGuide开发手记(一)安装Mapguide与示例程序

    安装Mapguide与示例程序 有些资料来自自己的翻译,有些信息源于网络,仅供参考,无版权,欢迎转载. 1.安装MapGuide Server: ** 下载MgServerSetup.exe,并安装M ...

  7. Ubuntu 18下OpenCV3.4的安装与使用示例

    Ubuntu 18下OpenCV3.4的安装与使用示例 安装环境: VirtualBox虚拟机Ubuntu 18.04系统 OpenCV版本:3.4.14 本机环境:Windows 10 文章目录 U ...

  8. coreseek php接口,筹建coreseek(sphinx+mmseg3)详细安装配置+php之sphinx扩展安装+php调用示例...

    搭建coreseek(sphinx+mmseg3)详细安装配置+php之sphinx扩展安装+php调用示例 一个文档包含了安装.增量备份.扩展.api调用示例,省去了查找大量文章的时间. 搭建cor ...

  9. 地面波天线怎样能多收台_地面波天线水平安装和垂直安装示例图解

    原标题:地面波天线水平安装和垂直安装示例图解 什么是地面波天线垂直或者水平安装?很多新手刚接触地面波电视的时候,老是在垂直还是水平安装上面纠结.原则上电视台使用哪种发射方式就采用那种方式接收,比如采用 ...

最新文章

  1. 字符串所有排列组合暴力递归
  2. 前端:Element UI 多选框组用法笔记
  3. c#进阶(1)—— Task Parallel Library 并行执行与串行执行
  4. 液体火箭发动机技术国家级重点实验室2021年度对外开放项目指南
  5. NLTK自然语言处理简介
  6. mysql单实例多数据库_MySQL单台服务器跑多个实例子详解
  7. matlab 游标 精度,如何在MATLAB数据光标中显示更高精度的数字?
  8. JS基础_js编写位置
  9. 高等代数——大学高等代数课程创新教材(丘维声)——3.4笔记+习题
  10. 4. Podfile 的解析逻辑
  11. 安装CentOS7操作系统
  12. 旅游网站源码在哪下载,完整的
  13. dedecms如何在首页调用会员信息(会员头像和名字等)
  14. rosetta_ddg 使用-rosetta 2020版
  15. 颜色透明度百分比对应8位颜色值
  16. (一)SPSS 输出表格样式设置操作——三线表(论文表格常用样式)
  17. 移动硬盘linux挂载格式化写保护,移动硬盘无法格式化?提示这张磁盘有写保护的解决方法...
  18. 罗素:自由主义的十诫
  19. 关于自建数据中心机房和租用云服务器各方面对比分析
  20. <计算机网络>网络分析仪分析协议

热门文章

  1. Nokia手机短信发件人显示乱码问题解决
  2. 对联一副,勉励奋斗在网络事业上的兄弟们
  3. 走近NAP功能 全面了解Vista系统安全机制
  4. [导入]关于复制目录架构
  5. 洛谷 - P2761 软件补丁问题(spfa+状压)
  6. HDU - 5592 ZYBs Premutation(线段树,逆序对)
  7. (转)网络流-最大流 SAP算法(模板)
  8. c语言输入十个英文国名,c语言程式设计 在主函式输入10个字元,用子函式求出共输入几个英文字元,几个数字字元,几个符号%...
  9. Java怎么查找字符串大写_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...
  10. 33.文件与 IO.rs