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作为客户端):

  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):

  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/

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

  1. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  2. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  3. tensorflow学习笔记二:入门基础 好教程 可用

    http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础   TensorFlow用张量这种数据结构来表示所有的数据.用一 ...

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

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  5. gearman学习笔记1

    1.简介       gearman是一个分布式开发框架,适合处理一些必须处理但是不影响主流程的操作,比如保存日志.发送邮件.缩略图片等.最早是基于perl语言的,2008年发布的时候改为C++语言开 ...

  6. MyBatis学习笔记(一)入门

    首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001    没事看看 - MyBatis工具:www.mybatis.t ...

  7. 【NodeJS 学习笔记02】入门资源很重要

    前言 在我映像中,异步最早出现与ajax,当时我还在搞.net,然后.net居然出了一个异步的控件...... 虽然我最后知道了他不是异步的......然后,前端异步用得特别多,如果不是异步的程序,你 ...

  8. SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装

          刚开始接触sql,于是准备在Ubuntu下学习sql,就跟着itercast的sql教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...

  9. Vue学习笔记-Vue基础入门

    此篇文章是本人在学习Vue是做的部分笔记的一个整理,内容不是很全面,希望能对阅读文章的同学有点帮助. 什么是Vue? Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式 ...

随机推荐

  1. Influxdb简单实用操作

    新的infludb版本已经取消了页面的访问方式,只能使用客户端来查看数据 一.influxdb与传统数据库的比较 库.表等比较: influxDB 传统数据库中的概念 database 数据库 mea ...

  2. makefile for opencv

    makefile #################################################### # Generic makefile - 万能Makefile # for ...

  3. shell 脚本实战笔记(8)--ssh免密码输入执行命令

    前言: ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓 ...

  4. HDU 1896:Stones(优先队列)

    Stones Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Sub ...

  5. 出于迁移项目的考虑,GitHub 中 Fork 出来的项目,如何与原项目断开 Fork 关系?

    如果需要为 GitHub 上的项目做贡献,我们通常会 Fork 到自己的名称空间下.在推送代码之后添加 pull request 时,GitHub 会自动为我们跨仓库建立 pull request 的 ...

  6. 内核启动卡在 Starting kernel ...

    一.有时log是这样的 Card did not respond to voltage select! bytes read ms (39.8 MiB/s) bytes read ms (13.4 M ...

  7. oracle for in 学习

    oracle for  in 是对于进行循环的数据处理时比较方便的 因为我们平时的操作经常会碰到进行循环的数据操作 以下为建立的例子 1. begin for item in 2..10 loop d ...

  8. smarty中调用php内置函数

    http://blog.csdn.net/clevercode/article/details/50373633

  9. k最邻近算法——使用kNN进行手写识别

    上篇文章中提到了使用pillow对手写文字进行预处理,本文介绍如何使用kNN算法对文字进行识别. 基本概念 k最邻近算法(k-Nearest Neighbor, KNN),是机器学习分类算法中最简单的 ...

  10. 【转】每天一个linux命令(43):killall命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/12/21/2827366.html Linux系统中的killall命令用于杀死指定名字的进程(kill ...