X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fcontents.py;h=4a0b3ae25237fe8a0b63b25f284d9d0e31903a04;hb=e2ab59085f36e9fec253cb2b473595409ba99bd2;hp=bb81589394f20fb77068eb8a04fd071ed25b6aa4;hpb=87bcdbc7dffd6230cb4d49942fbd87ead6f2fffe;p=dak.git diff --git a/daklib/contents.py b/daklib/contents.py index bb815893..4a0b3ae2 100755 --- a/daklib/contents.py +++ b/daklib/contents.py @@ -27,11 +27,8 @@ Helper code for contents generation. from daklib.dbconn import * from daklib.config import Config -from daklib.threadpool import ThreadPool -from multiprocessing import Pool -from sqlalchemy import desc, or_ -from sqlalchemy.exc import IntegrityError +from multiprocessing import Pool from subprocess import Popen, PIPE import os.path @@ -244,7 +241,6 @@ def generate_helper(suite_id, arch_id, overridetype_id, component_id = None): ''' This function is called in a new subprocess. ''' - DBConn().reset() session = DBConn().session() suite = Suite.get(suite_id, session) architecture = Architecture.get(arch_id, session) @@ -265,12 +261,12 @@ class ContentsScanner(object): ContentsScanner provides a threadsafe method scan() to scan the contents of a DBBinary object. ''' - def __init__(self, binary): + def __init__(self, binary_id): ''' - The argument binary is the actual DBBinary object that should be - scanned. + The argument binary_id is the id of the DBBinary object that + should be scanned. ''' - self.binary_id = binary.binary_id + self.binary_id = binary_id def scan(self, dummy_arg = None): ''' @@ -302,10 +298,18 @@ class ContentsScanner(object): if limit is not None: query = query.limit(limit) processed = query.count() - threadpool = ThreadPool() + pool = Pool() for binary in query.yield_per(100): - threadpool.queueTask(ContentsScanner(binary).scan) - threadpool.joinAll() + pool.apply_async(scan_helper, (binary.binary_id, )) + pool.close() + pool.join() remaining = remaining() session.close() return { 'processed': processed, 'remaining': remaining } + +def scan_helper(binary_id): + ''' + This function runs in a subprocess. + ''' + scanner = ContentsScanner(binary_id) + scanner.scan()