Gearmanã¯ããã¾ããã
è¿å¹´ã®Webæ¥çã§ã¯ãªã¯ã¨ã¹ãããã度ã«ãã¹ã¦ãå¦çãã¦ã¬ã¹ãã³ã¹ãè¿ãã®ã§ã¯ãªããä¸é¨ã®å¦çãã¸ã§ããã¥ã¼ã«æãããªããã¦è² è·è»½æ¸ã試ã¿ãã®ãå®ç³ã¨ãªãã¤ã¤ãããããªãããã§ãªããããªããããªæ代ã«çã¾ããPerlåå¿è ã®ããã«ãGearmanã使ã£ããµã³ãã«ã³ã¼ããæ¸ãã¦ã¿ãã¨ããè¨äºã§ãã
ã¤ã³ã¹ãã¼ã«
ãã¶ããããããã ã¨æãã¾ãã
install Gearman::Server
Gearman::Workerã¨Gearman::Client,Gearman::Taskã¯ããã§å ¥ããããã¯ãããªããããèªåã®éçºç°å¢ã¯ããã¶ãåã«Gearmanå ¥ãã¦ããã®ã§ãããã¡ãã£ã¨ã¤ã³ã¹ãã¼ã«æ¹æ³ãå¤ãã£ã¦ããããªæ°ããã¾ãã
ãã£ã¬ã¯ããªæ§æ
ããããç´¹ä»ããè¨äºã¯ãããã(æãã®)ãã£ã¬ã¯ããªæ§æã§ãã
/home/hogehoge/eg/client.pl /home/hogehoge/eg/worker.pl /home/hogehoge/tmp/gearmand.pid
ã¹ãã¼ãªã¼
ãã夫婦ãé£åã§æé£ãé£ã¹ã¦ãã¾ãããã®å¤«å©¦ã«ã¯æ¯åããã¾ãããã¾ã ãããã®ä¸ã«ããããã§ããç¶è¦ªã¯æ¯è¦ªã«è¨ãã¾ããããæ¯ããããã®åãèµ·ããã¦ãããªãããï¼ã
ç¶è¦ªãclientãæ¯è¦ªãworkerã ã¨æã£ã¦æ¬¡ã®ã³ã¼ãã試ãã¦ã¿ã¦ãã ããã
ãµã¼ãã¼èµ·å
sudo ãã¦ãããªãã¦ãããã¨æãã¾ãã
gearmand --pidfile=tmp/gearmand.pid
ã¯ã©ã¤ã¢ã³ã
vi eg/client.pl
#!/usr/bin/perl use strict; use warnings; use utf8; use Gearman::Client; my $client = Gearman::Client->new; $client->job_servers('127.0.0.1'); my $result_ref = $client->do_task("wakeup"); print "$$result_ref\n";
ãªãã¨ãªãããã®ã¹ã¯ãªãããå®è¡ããã¨æ¯åãèµ·ãã¦ããããªæ°æã¡ã«ãªã£ã¦ããã®ã§å®è¡ãã¦ã¿ã¾ãã
:!perl eg/client.pl
ã¨ãããã¹ã¯ãªããããã£ã¨èµ·åããã¾ã¾ã«ãªã£ã¦ãã¾ãã¾ããããªãã§ããããã¨ããããCtrl+cã§ã¹ã¯ãªãããçµäºãã¾ãã
調æ»
SeeAlso: http://dann.g.hatena.ne.jp/dann/20080727/p1
gearmandãtelnetã§è¦ãã¦ã¿ã¾ããããgearmandã¯7003ãã¼ãã§é常åãã¾ãã*1
telnet localhost 7003 status
次ã®ããã«è¡¨ç¤ºãããã¨æãã¾ãã
add 1 0 0
æå³ã¯æ¬¡ã®éã
jobã®é¢æ°å | ãã¥ã¼ä¸ã®ã¸ã§ãã®ãã¼ã¿ã«æ° | å®è¡ä¸ã®jobã®æ° | ãã®jobãå¦çã§ããworkeræ° |
ã¸ã§ãããã¥ã¼(å¾ ã¡è¡å)ã«é ç½®ãããã¨ã«ã¯æåãã¦ãã¾ããããã®jobãå¦çããworkerãåå¨ãã¦ãã¾ããã
ãã¾ã£ããæ¯è¦ªãã¾ã ç»å ´ãã¦ãã¾ããã§ããã
ã¡ãªã¿ã«ãtelnetãçµäºããå ´åã¯Ctrl+]ãæ¼ãã¦ããquitã¨å ¥åãã¾ãã
worker
#!/usr/bin/perl use strict; use warnings; use utf8; use Gearman::Worker; my $worker = Gearman::Worker->new; $worker->job_servers('127.0.0.1'); $worker->register_function( wakeup => sub { sleep(5); print "good morning!!\n"} ); $worker->work while 1;
å®è¡
:!perl eg/worker.pl
ããã§ãæ¯ãããæ¯åãèµ·ããããã«ä¼ããæºåãã§ãã¾ãããworkerãèµ·åãã¦ããç¶æ ã§clientãèµ·åããã¨ãworkerã5ç§å¾ã«æ¯åãèµ·ããã¾ãã
clientã§ã¯ä½æ¥ãæåãã証æ ã§ãã1ãè¿ãã¾ãã
ãç¶ããã¯åºãããªãã¨ãããªãã®ã§ã
ä»åº¦ã¯ç¶è¦ªãåºç¤¾ããæéã«ãªã£ãã®ã«ãæ¯åãã¾ã ãããã®ä¸ã«ããã±ã¼ã¹ãèãã¾ããç¶è¦ªã¯çé¢ã§å¥¥ããã«ããè¨ãã¾ããããæ¯ããããã®åãèµ·ããã¦ããã¦ãããªããããããè¡ã£ã¦ãã¾ããã
å ã»ã©ã®å ´åã¨éã£ã¦ãæ¯åãèµ·ãããã©ãããç¶è¦ªã確èªããå¿ è¦ããªãã®ã§client.plã次ã®ããã«æ¸ãããã¾ãã
#!/usr/bin/perl use strict; use warnings; use utf8; use Gearman::Client; my $client = Gearman::Client->new; $client->job_servers('127.0.0.1'); #my $result_ref = $client->do_task("wakeup"); #print "$$result_ref\n"; $client->dispatch_background( "wakeup" );
ã¾ã¨ã
æåã®ä¾ã§ã¯ClientãWorkerã®å¦çãçµããã¾ã§ããã»ã¹ãåããã¾ã¾ã«ãªã£ã¦ããã®ã§ãããéããã¢ã¸ã¥ã¼ã«ãåå²ãã¦ããã»ã¹ã軽ãããããªã©ãããã»ã¹ãåå²ããã¨ããäºãå¯è½ã§ãã
次ã®ä¾ã§ã¯æ¯åããã¡ãã¨èµ·ãããã©ãããç¶è¦ªã確èªã¯ãã¦ãã¾ããããã¾ãããã¯ç¢ºèªããªãã¦ãè¯ãã®ã§ããããå¿é ããªãã¦ããã¶ãèµ·ãã¦ããã¦ããã¨ã§ãããã
ãã®ããã«éä¸ã§ã¸ã§ããç ´æ£ããã¦ãã¾ã£ã¦ããã»ã©åé¡ã«ãªããªãã±ã¼ã¹ã§ã¯Gearmanã使ãã®ã¯è¯ãé¸æã ã¨æãã¾ãã
追è¨
ãããã便å©ãªãã®ãããã¾ãã
*1:ããã§ããªã人ãããã¨ã¯ãããã¾ããããã§ã¯ãã®åæã§è§£èª¬ãã¾ãã