$ sudo apt-get install libboost-all-dev $ sudo apt-get install gperf $ sudo apt-get install libevent1-dev
$ wget https://launchpad.net/gearmand/1.2/1.1.8/+download/gearmand-1.1.8.tar.gz $ tar zxvf gearmand-1.1.8.tar.gz $ cd gearmand-1.1.8/ $ ./configure $ make $ make install
ubuntu
$ apt-get install gearman-job-serve
$ wget http://pecl.php.net/get/gearman-1.1.1.tgz $ tar zxvf gearman-1.0.2.tgz $ cd gearman-1.0.2/ $ phpize $ make $ make install $ sudo echo "extension = gearman.so" > /etc/php5/conf.d/gearman.ini
重启apache
用以下命令检查扩展是否安装成功
$ php --info | grep "gearman support" gearman support => enabled
或者检查phpinfo确认安装成功
<?php $client= new GearmanClient(); $client->addServer("127.0.0.1", 4730); $who = array('who_send'=>'php','get_email'=>'this is a php test'); $img['image'] = '/var/www/pub/image/php_test.png'; print $client->do("sendEmail", serialize($who)); print "\n"; print $client->do("resizeImage", serialize($img)); print "\n";Worker 端程式
<?php $worker = new GearmanWorker(); $worker->addServer(); // 预设为 localhost $worker->addFunction('sendEmail', 'doSendEmail'); $worker->addFunction('resizeImage', 'doResizeImage'); while($worker->work()); function doSendEmail($job) { $data = unserialize($job->workload()); print_r($data); echo "Email sending is done really.\n\n"; return "php receive "; } function doResizeImage($job) { $data = unserialize($job->workload()); print_r($data); echo "Image resizing is really done.\n\n"; return "php receive"; }
Array ( [who_send] => web [get_email] => ) Email sending is really done. Array ( [image] => /var/www/pub/image/test.png ) Image resizing is really done.
easy_install gearman
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 doSendEmail(gearman_worker, job): print job.data return "python receive %s"%job.data def doResizeImage(gearman_worker, job): print job.data return "python receive %s"%job.data new_worker = CustomGearmanWorker(['localhost:4730']) new_worker.register_task("sendEmail", doSendEmail) new_worker.register_task("resizeImage", doResizeImage) new_worker.work()
from gearman import GearmanClient new_client = GearmanClient(['localhost:4730']) who = { 'who_send':'python', 'get_email':'this is a python test' } img = {'image':'/var/www/pub/image/python_test.png'} current_request = new_client.submit_job('sendEmail', str(who)) current_request2 = new_client.submit_job('resizeImage',str(img)) new_result = current_request.result new_result2 = current_request2.result print new_result print new_result2