コード例 #1
0
 def __init__(self, callback=None):
     if callback is not None:
         self.queue = None
         self.callback = callback
     else:
         self.queue = queue.Queue()
         self.callback = self.queue.put
コード例 #2
0
ファイル: publisher.py プロジェクト: jonathanvm13/lektor
    def __iter__(self):
        if not self.capture:
            raise RuntimeError('Not capturing')

        # Windows platforms do not have select() for files
        if os.name == 'nt':
            q = queue.Queue()

            def reader(stream):
                while 1:
                    line = stream.readline()
                    q.put(line)
                    if not line:
                        break

            t1 = threading.Thread(target=reader, args=(self._cmd.stdout, ))
            t1.setDaemon(True)
            t2 = threading.Thread(target=reader, args=(self._cmd.stderr, ))
            t2.setDaemon(True)
            t1.start()
            t2.start()
            outstanding = 2
            while outstanding:
                item = q.get()
                if not item:
                    outstanding -= 1
                else:
                    yield item.rstrip().decode('utf-8', 'replace')

        # Otherwise we can go with select()
        else:
            streams = [self._cmd.stdout, self._cmd.stderr]
            while streams:
                for l in select.select(streams, [], streams):
                    for stream in l:
                        line = stream.readline()
                        if not line:
                            if stream in streams:
                                streams.remove(stream)
                            break
                        yield line.rstrip().decode('utf-8', 'replace')
コード例 #3
0
ファイル: utils.py プロジェクト: Meresnes/meresnes.github.io
 def __init__(self, num_threads=None):
     if num_threads is None:
         num_threads = multiprocessing.cpu_count()
     self.tasks = queue.Queue(num_threads)
     for _ in range(num_threads):
         Worker(self.tasks)