Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Qudoを使ったJob queue system
Search
shibayu36
March 18, 2012
Technology
2
2.4k
Qudoを使ったJob queue system
Kyoto.pm Tech Talks #01で
shibayu36
March 18, 2012
Tweet
Share
More Decks by shibayu36
See All by shibayu36
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
900
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.7k
EMこそClaude Codeでコード調査しよう
shibayu36
0
1.1k
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
5.8k
個人CLAUDE.md紹介と設定から学んだこと/introduce-my-claude-md
shibayu36
0
1.6k
今の生産性改善活動で大切にしている考え方
shibayu36
8
8.8k
エンジニアメンター制度の効果的な運用を目指して/improve-mentor-system
shibayu36
27
10k
グレードイメージ具体化のため昇格理由を公開する
shibayu36
8
6k
新機能作成時に開発ブランチに細かくmergeしていく戦略/merge-strategy-for-new-feature
shibayu36
6
18k
Other Decks in Technology
See All in Technology
Windows ネットワークを再確認する
murachiakira
PRO
0
300
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
8
7.1k
元エンジニアPdM、IDEが恋しすぎてCursorに全業務を集約したら、スライド作成まで爆速になった話
doiko123
1
470
JAWS DAYS 2026 CDP道場 事前説明会 / JAWS DAYS 2026 CDP Dojo briefing document
naospon
0
200
技術的負債の泥沼から組織を救う3つの転換点
nwiizo
8
3k
GitLab Duo Agent Platform + Local LLMサービングで幸せになりたい
jyoshise
0
180
ブラックボックス観測に基づくAI支援のプロトコルのリバースエンジニアリングと再現~AIを用いたリバースエンジニアリング~ @ SECCON 14 電脳会議 / Reverse Engineering and Reproduction of an AI-Assisted Protocol Based on Black-Box Observation @ SECCON 14 DENNO-KAIGI
chibiegg
0
160
「Blue Team Labs Online」入門 - みんなで挑むログ解析バトル
v_avenger
0
110
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
5
300
Kiro のクレジットを使い切る!
otanikohei2023
0
120
JAWS Days 2026 楽しく学ぼう! 認証認可 入門/20260307-jaws-days-novice-lane-auth
opelab
9
1.5k
自動テストが巻き起こした開発プロセス・チームの変化 / Impact of Automated Testing on Development Cycles and Team Dynamics
codmoninc
3
1.2k
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.3k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.4k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
400
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
460
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
100
The Curious Case for Waylosing
cassininazir
0
260
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
69
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
120
Building the Perfect Custom Keyboard
takai
2
710
Transcript
2VEPΛͬͨ KPCRVFVFTZTUFN id:shiba_yu36 2012/03/17 Kyoto.pm Tech Talks #01 20123݄18༵
ࣗݾհ 20123݄18༵
TIJCB@ZV TIJCBZV PSFUD 20123݄18༵
!גࣜձࣾͯͳ • ՝ۚλΠϜϥΠϯͳͲϓϥοτ ϑΥʔϜ෦Λ୲ • ֎෦αʔϏε࿈ܞ • ςετڥඋ 20123݄18༵
QFSM w,ZPUPQN w$1"/ w8FC4FSWJDF#JUMZ w%#*Y%BUB'BDUPSZ w1SF1"/ͨ·ʹखͬͯ·͢ 20123݄18༵
1SF1"/։ൃͰKPCRVFVFTZTUFNΛ ͏ػձ͕͋ͬͨͷͰɺͦͷΈͱ 2VEPʹΑΔ࣮Λհ͠·͢ɻ 20123݄18༵
ΞδΣϯμ wKPCRVFVFTZTUFN w2VEPΛ࣮ͬͨ wͬͯΈͯ ͋·ΓKPCRVFVFTZTUFNΛ ͬͨ͜ͱͷͳ͍ਓ͚ 20123݄18༵
20123݄18༵
KPCRVFVFTZTUFNʁ ΞϓϦέʔγϣϯͷόοΫάϥϯ υଆͰඇಉظͰॲཧΛ࣮ߦ͢ΔͨΊ ͷΈ 20123݄18༵
ϝϦοτ wॲཧΛޙճ͠ wϦΞϧλΠϜੑ͕ඞཁͳ͍ͷ wΤϥʔϋϯυϦϯά wϦτϥΠ wεέʔϧ 20123݄18༵
KPCRVFVFTZTUFNͷߏ w+PCΛFORVFVF͢Δ෦ DMJFOU w+PCͷॲཧຊମ XPSLFS w+PCͷ࣮ߦͷཧ XPSLFSNBOBHFS 20123݄18༵
Ұྫ 20123݄18༵
QFSMͰͷ KPCRVFVFTZTUFN w(FBSNBO wதؒEBFNPOར༻ w5IF4DIXBSU[ w3%#.4Λ͏ wଟ͘ͷ࣮͕͋Δ 20123݄18༵
QFSMͰͷ KPCRVFVFTZTUFN w 2VEP OFLPLBL͞Μ NBTBSU[͞Μ w ܰྔKPCRVFVFTZTUFN w +POL
w ࠷ݶͷKPCRVFVF"1*Λ࣮ w $MVUDI w EJTUSJCVUFEKPCRVFVF w DMJFOU͕ॲཧ͢ΔXPSLFSΛܾఆ 20123݄18༵
2VEPΛ࣮ͬͨ 20123݄18༵
ͳͥ2VEP w1SF1"/ͰNPEVMF͕ߘ͞ΕͨΒɺ͍ ͍ײ͡ʹ௨͍ͨ͠ wHJUIVCͷϑΥϩʔ wΩʔϫʔυʹϚονͰ௨ wॲཧ͕গ͠ॏ͍ͷͰɺ·ͣKPCRVFVF TZTUFNΛಋೖ͔ͨͬͨ͠ 20123݄18༵
ͳͥ2VEP w5IF4DIXBSU[ΦʔόʔεϖοΫײ wͨ͘͞ΜΧελϚΠζ͍ͨ͠Θ͚Ͱ ͳ͍ 2VEP͕ͪΐ͏ͲΑͦ͞͏ 20123݄18༵
%#४උ RVEPECRVEPVTFSSPPU SECNTNZTRMVTF@JOOPEC 20123݄18༵
$MJFOU 20123݄18༵
$MJFOU package Sample::Qudo::Client; use parent qw(Qudo); sub new { my
($class, $args) = @_; $class->SUPER::new( databases => [+{ dsn => 'dbi:mysql:qudo_sample', username => 'root', password => '', }], default_hooks => ['Qudo::Hook::Serialize::JSON'], ); } 20123݄18༵
$MJFOU $qudo->enqueue( "Sample::Qudo::Worker::Echo", { arg => {message => 'hoge'} },
); 20123݄18༵
8PSLFS 20123݄18༵
8PSLFS package Sample::Qudo::Worker::Echo; use parent qw(Qudo::Worker); sub work { my
($self , $job ) = @_; my $arg = $job->arg; my $message = $arg->{message}; sleep 2; # heavy task... warn $message; $job->completed(); # or $job->abort } 20123݄18༵
8PSLFS.BOBHFS 20123݄18༵
8PSLFS.BOBHFS # worker.pl my $qudo = Qudo->new( databases => [+{
dsn => 'dbi:mysql:qudo_sample', username => 'root', password => '', }], default_hooks => ['Qudo::Hook::Serialize::JSON'], manager_abilities => [qw/Sample::Qudo::Worker::Echo/], ); $qudo->work; 20123݄18༵
8PSLFS.BOBHFS QBSBMMFM my $manager = Qudo::Parallel::Manager->new( databases => ..., default_hooks
=> ..., manager_abilities => ..., work_delay => 5, max_workers => 3, min_spare_workers => 3, auto_load_worker => 1, ); $manager->run; 20123݄18༵
%FNP XPSLFSNBOBHFS QBSBMMFM XPSLFSJOTFSU͞ΕͨใΛXBSO͢Δ͚ͩ 20123݄18༵
EFQMPZ QFSMXPSLFSQM 20123݄18༵
EFQMPZ EBFNPOUPPMT # run.sh #!/bin/sh exec 2>&1 cd /path/Sample-Worker ||
exit 1 exec setuidgid app /usr/bin/perl worker.pl svc -u /etc/service/Sample-Worker #start svc -d /etc/service/Sample-Worker #stop 20123݄18༵
ͬͯΈͯ 20123݄18༵
ಛ ͱʹ͔͘؆୯ ͙͢ʹKPCRVFVFͷΈΛ ͬͯΈ͍ͨͳΒ࠷ద 20123݄18༵
ͨͩ͠ wΘΕ͍ͯΔͱ͜Ζͦ͜·Ͱଟ͘ͳ ͍ w5IF4DIXBSU[ͱ͔ w+PCཧͷΈࣗମΛΧελϚΠζ͠ Α͏ͱ͢Δͱ͍͠ w+POLͱ͔ 20123݄18༵
wKPCRVFVFTZTUFNͱ͔ͬͨ͜ͱແ ͍ wखܰʹKPCRVFVFTZTUFNΛͬͯΈ ͍ͨ Ұ2VEPΛͬͯΈΔͱྑ͍Ͱ͢ʂ 20123݄18༵
20123݄18༵
·ͱΊ wKPCRVFVFTZTUFNͷ؆୯ͳઆ໌ w2VEPͰͷ࣮ͱͦͷಛͷհ wͱʹ͔͘؆୯ w৴པੑ5IF4DIXBSU[ wΧελϚΠζ+POL 20123݄18༵