【Gearman学习笔记】分布式处理入门

1.首先,确保你已经安装了gearmand环境并且语言绑定(language binding)已经生效。

2.涉及到的各个部分:

ServerThe server, gearmand, will coordinate clients and workers ensuring that calls from the clients are delivered to workers and that results from workers are sent back to the client.gearmand作为我们的服务端,使client和worker协同工作,确保从client端发过来的请求能够传送到worker,同时使经过worker处理过的请求结果能够返回给client。ClientA process which has a blob of data to process, a known function which can process it, and a desire to get the processed results back. In our case, the client wants a string reversed.Client就是一个有很多待处理数据的进程,它能够被其他程序处理并得到处理后的返回结果。在我们的例子中,client端的需求是使一个字符串翻转。WorkerA process which connected to the server and offers to process function calls. In this example, the client can reverse strings.Worker是一个连接到server的进程,server端接收到client的请求后,把任务分派给worker,worker对请求作出处理。在我们的例子中,worker要做的任务是翻转一份字符串。
3.client.php(本文使用PHP作为客户端):

[php] view plaincopy

  1. <?php
  2. // Create our client object
  3. $client = new GearmanClient();
  4. // Add a server
  5. $client->addServer(); // by default host/port will be "localhost" & 4730
  6. echo "Sending job\n";
  7. // Send reverse job
  8. $result = $client->doNormal("reverse", "Hello!");
  9. if ($result) {
  10. echo "Success: $result\n";
  11. }

4.worker.py(本文使用Python作为worker):

[python] view plaincopy

  1. import gearman
  2. gm_worker = gearman.GearmanWorker([‘localhost:4730‘])
  3. def task_listener_reverse(gearman_worker, gearman_job):
  4. print ‘Reversing string: ‘ + gearman_job.data
  5. return gearman_job.data[::-1]
  6. # gm_worker.set_client_id is optional
  7. gm_worker.set_client_id(‘python-worker‘)
  8. gm_worker.register_task(‘reverse‘, task_listener_reverse)
  9. # Enter our work loop and call gm_worker.after_poll() after each time we timeout/see socket activity
  10. gm_worker.work()

5.测试:

测试环境配置:

Linux3.5.7-gentoo #1  x86_64 Intel(R) Xeon(R) CPU E5645 @ 2.40GHz GenuineIntel GNU/Linux

因为我在gentoo server下面,没法开两个terminal,所以,要先把worker.py作为后台进程运行:

然后,用php CLI运行client.php:

可以看到,在gearman的协调下,worker完成一次client的请求。

6.英文出处:http://gearman.org/examples/reverse/

7.【更新】

上面的例子讲的是同步机制,这还体现不出gearman的强大,下面是doBackground()的异步机制:

http://gearman.org/examples/send-emails/

时间: 2024-08-10 17:20:07

【Gearman学习笔记】分布式处理入门的相关文章

现代C++学习笔记之二入门篇2,数据转换

static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换,但是,编译器在无法分辨此类转换在运行时是否是安全的. dynamic_cast: dynamic_cast在运行时检查基类指针和派生类指针之间的强制转换. dynamic_cast 是比 static_cast 更安全的强制类型转换,但运行时检查会带来一些开销. const_cast:    con

MySQL学习笔记之一 MySQL入门

本人之前接触的关系型数据库主要是oracle和sqlserver,而对于mysql知之甚少,但查阅网上资料发现,mysql与oracle非常相似,所以学起来应该不会很费劲,在总结的时候可能更多的把关注点放在它与oracle的不同之处. 一.简介 MySQL是一个真正的多用户.多线程SQL数据库服务器.SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言.MySQL是一个客户端/服务器结构的实现, 它由一个服务器守护程序mysqld和很多不同的客户程序和库组成. MySQL的普及并不局限于

现代C++学习笔记之二入门篇1

现代 C++ 强调: 基于堆栈的范围,而非堆或静态全局范围. 自动类型推理,而非显式类型名称. 智能指针而不是原始指针. std::string 和 std::wstring 类型(请参见 <string>),而非原始 char[] 数组. 标准模板库 (STL) 容器(例如 vector.list 和 map),而非原始数组或自定义容器. 请参见 <vector>.<list> 和 <map>. STL 算法,而非手动编码的算法. 异常,可报告和处理错误条

spark学习笔记总结-spark入门资料精化

Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用.减少了延时处理,提高性能效率实用灵活性.也可以与hadoop切实相互结合. spark核心部分分为RDD.Spark SQL.Spark Streaming.MLlib.GraphX.Spark R等核心组件解决了很多的大数据问题,其完美的框架日受欢迎.其相应的生态环境包括zepplin等可视化方面

MyBatis学习笔记(一)入门

一.理解什么是MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索. MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录. 1)MyBATIS 目前提供了三种语言实现的版本,包括:Java..NET以及Ruby.(我主要学习java,

jQuery学习笔记之一——jQuery入门与基础核心

因为工作的原因,所以自学了下jQuery,这里以李炎恢老师的教程为自觉教程,并记录学习中遇到的问题. 教程下载地址: http://www.verycd.com/topics/2956408/ 课件下载地址: http://download.csdn.net/download/ip_kv3000/8986013 jQuery类库下载地址: http://jquery.com/ jQuery入门  优势.历史.版本我就不多说了,网上有的是.至于为什么学,因为很有用,为什么非要学他,因为微软加入到了

C++并发编程学习笔记&lt;1&gt; 开始入门

开始入门 一个多线程C++程序是什么样子的? 它看上去和其他所有C++程序一样,通常是变量.类以及函数的组合.唯一真正的区别在于某些函数可以并发运行, 当然,为了并发地运行函数,必须使用特定的函数以及对象来管理各个线程. 从hello world 开始 让我们从一个经典的例子开始:一个打印"Hello World."的程序.一个非常简单的在单线程中运行的Hello, World 程序如下所示,当我们谈到多线程时,它可以作为一个基准, #include<iostream> i

Laravel5.1学习笔记19 EloquentORM 入门

Eloquent:入门 简介 定义模型(model) Eloquent Model Conventions Retrieving Multiple Models Retrieving Single Models / Aggregates Retrieving Aggregates Inserting & Updating Models Basic Inserts Basic Updates Mass Assignment Deleting Models Soft Deleting Queryin

gearman学习笔记2

由于只在ubuntu下进行练习,centerOS的具体怎么实施后面再来测试 1.第一步:安装gearman 首先运行sudo apt-get install php5-dev  才能安装php的gearman扩展,第二部运行sudo apt-get install gearman ,这一步会把gearman扩展 gearmand任务分发器   gearman-job-server工作服务器一起安装,所以比起刚开始用的编译安装,实在是太方便了. 2.启动任务分发器 sudo gearmand -d