66import os , sys
77import time
88import simplejson
9+
910class Worker (object ):
10- def __init__ (self , queues = [], server = "localhost:6379" ):
11+ def __init__ (self , queues = [], server = "localhost:6379" , password = None ):
1112 self .queues = queues
1213 self .validate_queues ()
1314 self ._shutdown = False
1415 self .child = None
1516 self .pid = os .getpid ()
1617 if isinstance (server ,basestring ):
17- self .resq = ResQ (server )
18+ self .resq = ResQ (server = server , password = password )
1819 elif isinstance (server , ResQ ):
1920 self .resq = server
2021 else :
@@ -26,28 +27,29 @@ def validate_queues(self):
2627 raise NoQueueError ("Please give each worker at least one queue." )
2728
2829 def register_worker (self ):
29- self .resq .redis .sadd ('workers' ,str (self ))
30+ self .resq .redis .sadd ('resque: workers' ,str (self ))
3031 #self.resq._redis.add("worker:#{self}:started", Time.now.to_s)
3132 self .started = datetime .datetime .now ()
3233 #Stat.clear("processed:#{self}")
3334 #Stat.clear("failed:#{self}")
3435
3536 def _set_started (self , time ):
3637 if time :
37- self .resq .redis .set ("worker:%s:started" % self , time .strftime ('%Y-%m-%d %H:%M:%S' ))
38+ self .resq .redis .set ("resque: worker:%s:started" % self , time .strftime ('%Y-%m-%d %H:%M:%S' ))
3839 else :
39- self .resq .redis .delete ("worker:%s:started" % self )
40-
40+ self .resq .redis .delete ("resque: worker:%s:started" % self )
41+
4142 def _get_started (self ):
42- datestring = self .resq .redis .get ("worker:%s:started" % self )
43+ datestring = self .resq .redis .get ("resque: worker:%s:started" % self )
4344 ds = None
4445 if datestring :
4546 ds = datetime .datetime .strptime (datestring , '%Y-%m-%d %H:%M:%S' )
4647 return ds
48+
4749 started = property (_get_started , _set_started )
4850
4951 def unregister_worker (self ):
50- self .resq .redis .srem ('workers' ,str (self ))
52+ self .resq .redis .srem ('resque: workers' ,str (self ))
5153 self .started = None
5254
5355 def startup (self ):
@@ -71,14 +73,13 @@ def kill_child(self, signum, frame):
7173 if self .child :
7274 print "Killing child at %s" % self .child
7375 os .kill (self .child , signal .SIGKILL )
74-
76+
7577 def __str__ (self ):
7678 if getattr (self ,'id' , None ):
7779 return self .id
7880 hostname = os .uname ()[1 ]
79- #pid = os.getpid()
8081 return '%s:%s:%s' % (hostname , self .pid , ',' .join (self .queues ))
81-
82+
8283 def work (self , interval = 5 ):
8384 self .startup ()
8485 while True :
@@ -128,7 +129,7 @@ def process(self, job=None):
128129 def reserve (self ):
129130 for q in self .queues :
130131 print "Checking %s" % q
131- job = Job .reserve (q , self .resq )
132+ job = Job .reserve (q , self .resq , self . __str__ () )
132133 if job :
133134 print "Found job on %s" % q
134135 return job
@@ -141,14 +142,14 @@ def working_on(self, job):
141142 'payload' : job ._payload
142143 }
143144 data = simplejson .dumps (data )
144- self .resq .redis ["worker:%s" % str (self )] = data
145+ self .resq .redis ["resque: worker:%s" % str (self )] = data
145146 print "worker:%s" % str (self )
146- print self .resq .redis ["worker:%s" % str (self )]
147+ print self .resq .redis ["resque: worker:%s" % str (self )]
147148
148149 def done_working (self ):
149150 print 'done working'
150151 self .processed ()
151- self .resq .redis .delete ("worker:%s" % str (self ))
152+ self .resq .redis .delete ("resque: worker:%s" % str (self ))
152153
153154 def processed (self ):
154155 total_processed = Stat ("processed" , self .resq )
@@ -164,20 +165,21 @@ def failed(self):
164165 stat = Stat ("failed:%s" % self , self .resq )
165166 total_failed .incr ()
166167 stat .incr ()
168+
167169 def get_failed (self ):
168170 return Stat ("failed:%s" % self , self .resq ).get ()
169171 def job (self ):
170- data = self .resq .redis .get ("worker:%s" % self )
172+ data = self .resq .redis .get ("resque: worker:%s" % self )
171173 if data :
172174 return ResQ .decode (data )
173175 return {}
176+
174177
175178 def processing (self ):
176179 return self .job ()
177180
178181 def state (self ):
179- return 'working' if self .resq .redis .exists ('worker:%s' % self ) else 'idle'
180-
182+ return 'working' if self .resq .redis .exists ('resque:worker:%s' % self ) else 'idle'
181183
182184 @classmethod
183185 def run (cls , queues , server ):
@@ -190,7 +192,7 @@ def all(cls, host="localhost:6379"):
190192 resq = ResQ (host )
191193 elif isinstance (host , ResQ ):
192194 resq = host
193- return [Worker .find (w ,resq ) for w in resq .redis .smembers ('workers' )]
195+ return [Worker .find (w ,resq ) for w in resq .redis .smembers ('resque: workers' )]
194196
195197 @classmethod
196198 def working (cls , host ):
@@ -199,13 +201,13 @@ def working(cls, host):
199201 elif isinstance (host , ResQ ):
200202 resq = host
201203 total = []
202- for key in Worker .all (host ):
203- total .append ('worker:%s' % key )
204+ for key in Worker .all (host ):
205+ total .append ('resque: worker:%s' % key )
204206 names = []
205207 for key in total :
206208 value = resq .redis .get (key )
207209 if value :
208- w = Worker .find (key [7 :], resq )
210+ w = Worker .find (key [14 :], resq ) #resque:worker:
209211 names .append (w )
210212 return names
211213
@@ -221,7 +223,7 @@ def find(cls, worker_id, resq):
221223
222224 @classmethod
223225 def exists (cls , worker_id , resq ):
224- return resq .redis .sismember ('workers' , worker_id )
226+ return resq .redis .sismember ('resque: workers' , worker_id )
225227
226228
227229if __name__ == "__main__" :
@@ -236,4 +238,4 @@ def exists(cls, worker_id, resq):
236238 queues = options .queue_list .split (',' )
237239 import sys
238240 sys .path .insert (0 ,'/Users/mgeorge/dev/pyres/src' )
239- Worker .run (queues , options .server )
241+ Worker .run (queues , options .server )
0 commit comments