1+ import os
2+ import datetime
3+ import time
4+ import signal
5+
16try :
27 import multiprocessing
38except :
49 import sys
510 sys .exit ("multiprocessing was not available" )
6- import os , datetime , time , signal
11+
712from pyres import ResQ
8-
13+
914from pyres .exceptions import NoQueueError
1015from pyres .worker import Worker
1116
@@ -18,20 +23,23 @@ def work(self, interval=5):
1823 job = self .reserve ()
1924 if job :
2025 print "got: %s" % job
26+
2127 self .child = os .fork ()
28+
2229 if self .child :
23- print 'Forked %s at %s' % (self .child , datetime .datetime .now ())
30+ print 'Forked %s at %s' % (self .child ,
31+ datetime .datetime .now ())
2432 os .waitpid (self .child , 0 )
2533 else :
26- print 'Processing %s since %s' % (job ._queue , datetime .datetime .now ())
34+ print 'Processing %s since %s' % (job ._queue ,
35+ datetime .datetime .now ())
2736 self .process (job )
2837 os ._exit (0 )
2938 self .child = None
3039 else :
3140 break
32-
41+
3342 self .unregister_worker ()
34-
3543
3644class Manager (object ):
3745 def __init__ (self , queues , host , max_children = 10 ):
@@ -43,28 +51,27 @@ def __init__(self, queues, host, max_children=10):
4351 self .resq = ResQ (host )
4452 self .validate_queues ()
4553 self .reports = {}
46-
54+
4755 def __str__ (self ):
48- import os ;
4956 hostname = os .uname ()[1 ]
5057 pid = os .getpid ()
5158 return 'Manager:%s:%s:%s' % (hostname , pid , ',' .join (self .queues ))
52-
59+
5360 def validate_queues (self ):
5461 if not self .queues :
5562 raise NoQueueError ("Please give each worker at least one queue." )
56-
63+
5764 def check_rising (self , queue , size ):
5865 if queue in self .reports :
59- time = time .time ()
66+ new_time = time .time ()
6067 old_size = self .reports [queue ][0 ]
6168 old_time = self .reports [queue ][1 ]
62- if time > old_time + 5 and size > old_size + 20 :
69+ if new_time > old_time + 5 and size > old_size + 20 :
6370 return True
6471 else :
6572 self .reports [queue ] = (size , time .time ())
6673 return False
67-
74+
6875 def work (self ):
6976 self .startup ()
7077 while True :
@@ -74,44 +81,46 @@ def work(self):
7481 for queue in self .queues :
7582 #check queue size
7683 size = self .resq .size (queue )
77- if check_rising (queue ,size ):
84+
85+ if self .check_rising (queue , size ):
7886 if len (self .children ) < self .max_children :
7987 self .start_child (queue )
80-
88+
8189 def startup (self ):
8290 self .register_manager ()
8391 self .register_signals ()
84-
92+
8593 def register_manager (self ):
86- self .resq .redis .sadd ('managers' ,str (self ))
87-
94+ self .resq .redis .sadd ('managers' , str (self ))
95+
8896 def unregister_manager (self ):
89- self .resq .redis .srem ('managers' ,str (self ))
90-
97+ self .resq .redis .srem ('managers' , str (self ))
98+
9199 def register_signals (self ):
92100 signal .signal (signal .SIGTERM , self .shutdown_all )
93101 signal .signal (signal .SIGINT , self .shutdown_all )
94102 signal .signal (signal .SIGQUIT , self .schedule_shutdown )
95103 signal .signal (signal .SIGUSR1 , self .kill_children )
96-
104+
97105 def shutdown_all (self , signum , frame ):
98106 self .schedule_shutdown (signum , frame )
99107 self .kill_children (signum , frame )
100-
108+
101109 def schedule_shutdown (self , signum , frame ):
102110 self ._shutdown = True
103-
111+
104112 def kill_children (self ):
105113 for child in self .children :
106114 child .terminate ()
107-
115+
108116 def start_child (self , queue ):
109- p = multiprocessing .Process (target = JuniorWorker .run , args = ([queue ], self ._host ))
117+ p = multiprocessing .Process (target = JuniorWorker .run , args = ([queue ],
118+ self ._host ))
110119 self .children .append (p )
111120 p .start ()
112121 return True
113-
122+
114123 @classmethod
115- def run (cls , queues = [] , host = "localhost:6379" ):
124+ def run (cls , queues = () , host = "localhost:6379" ):
116125 manager = cls (queues , host )
117- manager .work ()
126+ manager .work ()
0 commit comments