mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
oe/utils: Add simple threaded pool implementation
Python 2.7 doesn't have a threaded pool implementation, just a multiprocessing one. We have need of a threaded implementation so add some simple class code to support this. (From OE-Core rev: 44ae778fefca5112900b870be7a485360c50bc2e) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
9fd3c7e64b
commit
5331bbc1ac
|
@ -207,3 +207,44 @@ def multiprocess_exec(commands, function):
|
|||
def squashspaces(string):
|
||||
import re
|
||||
return re.sub("\s+", " ", string).strip()
|
||||
|
||||
#
|
||||
# Python 2.7 doesn't have threaded pools (just multiprocessing)
|
||||
# so implement a version here
|
||||
#
|
||||
|
||||
from Queue import Queue
|
||||
from threading import Thread
|
||||
|
||||
class ThreadedWorker(Thread):
|
||||
"""Thread executing tasks from a given tasks queue"""
|
||||
def __init__(self, tasks):
|
||||
Thread.__init__(self)
|
||||
self.tasks = tasks
|
||||
self.daemon = True
|
||||
self.start()
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
func, args, kargs = self.tasks.get()
|
||||
try:
|
||||
func(*args, **kargs)
|
||||
except Exception, e:
|
||||
print e
|
||||
finally:
|
||||
self.tasks.task_done()
|
||||
|
||||
class ThreadedPool:
|
||||
"""Pool of threads consuming tasks from a queue"""
|
||||
def __init__(self, num_threads):
|
||||
self.tasks = Queue(num_threads)
|
||||
for _ in range(num_threads): ThreadedWorker(self.tasks)
|
||||
|
||||
def add_task(self, func, *args, **kargs):
|
||||
"""Add a task to the queue"""
|
||||
self.tasks.put((func, args, kargs))
|
||||
|
||||
def wait_completion(self):
|
||||
"""Wait for completion of all the tasks in the queue"""
|
||||
self.tasks.join()
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user