mirror of
https://git.yoctoproject.org/poky
synced 2026-05-31 12:49:46 +00: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:
@@ -207,3 +207,44 @@ def multiprocess_exec(commands, function):
|
|||||||
def squashspaces(string):
|
def squashspaces(string):
|
||||||
import re
|
import re
|
||||||
return re.sub("\s+", " ", string).strip()
|
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()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user