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.8k
新機能作成時に開発ブランチに細かく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.3k
はてなブログチームの開発フローとGitHub
shibayu36
145
76k
課題をテストで解決する
shibayu36
2
2.3k
Other Decks in Technology
See All in Technology
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
600
技術負債の「予兆検知」と「状況異変」のススメ / Technology Dept
i35_267
1
1.1k
Developers Summit 2025 浅野卓也(13-B-7 LegalOn Technologies)
legalontechnologies
PRO
0
710
技術的負債解消の取り組みと専門チームのお話 #技術的負債_Findy
bengo4com
1
1.3k
MC906491 を見据えた Microsoft Entra Connect アップグレード対応
tamaiyutaro
1
540
全文検索+セマンティックランカー+LLMの自然文検索サ−ビスで得られた知見
segavvy
2
100
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
210
分解して理解する Aspire
nenonaninu
1
110
リアルタイム分析データベースで実現する SQLベースのオブザーバビリティ
mikimatsumoto
0
1.3k
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
1.1k
君も受託系GISエンジニアにならないか
sudataka
2
430
室長と気ままに学ぶマイクロソフトのビジネスアプリケーションとビジネスプロセス
ryoheig0405
0
360
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
Docker and Python
trallard
44
3.3k
BBQ
matthewcrist
87
9.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
240
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Rails Girls Zürich Keynote
gr2m
94
13k
Thoughts on Productivity
jonyablonski
69
4.5k
GraphQLとの向き合い方2022年版
quramy
44
13k
Visualization
eitanlees
146
15k
A Philosophy of Restraint
colly
203
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
330
Building Flexible Design Systems
yeseniaperezcruz
328
38k
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༵