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.3k
Qudoを使ったJob queue system
Kyoto.pm Tech Talks #01で
shibayu36
March 18, 2012
Tweet
Share
More Decks by shibayu36
See All by shibayu36
今の生産性改善活動で大切にしている考え方
shibayu36
8
8.5k
エンジニアメンター制度の効果的な運用を目指して/improve-mentor-system
shibayu36
27
10k
グレードイメージ具体化のため昇格理由を公開する
shibayu36
8
5.9k
新機能作成時に開発ブランチに細かくmergeしていく戦略/merge-strategy-for-new-feature
shibayu36
6
17k
一から始めるJavaScriptユニットテスト/js-unit-test-from-scratch
shibayu36
8
33k
技術ブログを書くことについて/writing-tech-blog
shibayu36
17
26k
はてなと技術研修
shibayu36
1
6.4k
はてなブログチームの開発フローとGitHub
shibayu36
145
76k
課題をテストで解決する
shibayu36
2
2.3k
Other Decks in Technology
See All in Technology
LLM アプリケーションのためのクラウドセキュリティ - CSPM の実装ポイント-
osakatechlab
0
380
とあるEdTechベンチャーのシステム構成こだわりN選 / edtech-system
gotok365
3
170
SaaS公式MCPサーバーをリリースして得た学び
kawamataryo
2
430
Terraform にコントリビュートしていたら Azure のコストをやらかした話 / How I Messed Up Azure Costs While Contributing to Terraform
nnstt1
1
450
AI 코딩 에이전트 더 똑똑하게 쓰기
nacyot
0
540
DjangoCon Europe 2025 Keynote - Django for Data Science
wsvincent
0
540
Как мы автоматизировали интеграционное тестирование с Gonkey и не пожалели. Паша Егорычев, Кирилл Поляков
lamodatech
0
2.1k
Cursorを全エンジニアに配布 その先に見据えるAI駆動開発の未来 / 2025-05-13-forkwell-ai-study-1-cursor-at-loglass
itohiro73
2
440
GraphQLを活用したリアーキテクチャに対応するSLI/Oの再設計
coconala_engineer
0
210
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
110
AndroidアプリエンジニアもMCPを触ろう
kgmyshin
2
650
Datadog のトライアルを成功に導く技術 / Techniques for a successful Datadog trial
nulabinc
PRO
0
130
Featured
See All Featured
Music & Morning Musume
bryan
47
6.5k
Into the Great Unknown - MozCon
thekraken
38
1.8k
The Invisible Side of Design
smashingmag
299
50k
Gamification - CAS2011
davidbonilla
81
5.3k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
A better future with KSS
kneath
239
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Building Adaptive Systems
keathley
41
2.5k
Typedesign – Prime Four
hannesfritz
41
2.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
33k
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༵