1.1 --- a/pprocess.py Sat Sep 15 00:12:05 2007 +0000
1.2 +++ b/pprocess.py Sat Sep 15 01:21:12 2007 +0000
1.3 @@ -251,7 +251,7 @@
1.4 http://www.greenend.org.uk/rjk/2001/06/poll.html
1.5 """
1.6
1.7 -__version__ = "0.2.6"
1.8 +__version__ = "0.3"
1.9
1.10 import os
1.11 import sys
1.12 @@ -383,6 +383,7 @@
1.13 """
1.14
1.15 self.limit = limit
1.16 + self.waiting = []
1.17 self.autoclose = autoclose
1.18 self.readables = {}
1.19 self.removed = []
1.20 @@ -470,6 +471,16 @@
1.21 while self.limit is not None and len(self.active()) >= self.limit:
1.22 self.store()
1.23
1.24 + def start_waiting(self):
1.25 +
1.26 + """
1.27 + Start a waiting process.
1.28 + """
1.29 +
1.30 + if self.waiting:
1.31 + callable, args, kw = self.waiting.pop()
1.32 + self.add(start(callable, *args, **kw))
1.33 +
1.34 def finish(self):
1.35
1.36 """
1.37 @@ -485,6 +496,7 @@
1.38
1.39 for channel in self.ready():
1.40 self.store_data(channel)
1.41 + self.start_waiting()
1.42
1.43 def store_data(self, channel):
1.44
1.45 @@ -505,6 +517,10 @@
1.46 created between this process and the created process.
1.47 """
1.48
1.49 + if self.limit is not None and len(self.active()) >= self.limit:
1.50 + self.waiting.insert(0, (callable, args, kw))
1.51 + return
1.52 +
1.53 self.add_wait(start(callable, *args, **kw))
1.54
1.55 def create(self):
1.56 @@ -709,7 +725,7 @@
1.57 exc_type, exc_value, exc_traceback = sys.exc_info()
1.58 channel.send(exc_value)
1.59 finally:
1.60 - pprocess.exit(channel)
1.61 + exit(channel)
1.62 else:
1.63 return channel
1.64