как заставить генератор генерировать пока обрабатывается предыдущий результат? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть генератор, который читает некоторые данные с диска, выполняет некоторые вычисления на процессоре, а затем выдает результат после перемещения его в графический процессор.Результат затем обрабатывается на GPU.Обработка занимает больше времени, чем генерация, поэтому я подумал, что было бы полезно сгенерировать следующий пакет, пока выполняется обработка последнего пакета.

Я пытался сделать это с помощью библиотеки потоков Python.Предоставление потоку генератора в качестве цели:

class ThreadGenerator(threading.Thread):
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs={}, Verbose=None):
        threading.Thread.__init__(self, group, target, name, args, kwargs)
    def run(self):
        if self._target is not None:
            self._gen = self._target(*self._args, **self._kwargs)
            self.output = next(self._gen)
    def get_next(self):
        self.output = next(self._gen)

Проблема в том, что только run происходит параллельно с основным процессом, а get_next - нет.

Идея состояла в том, чтобыполучить t.output, вызвав t.get_next, а затем выполнить вычисления на выходе, в то время как выдается следующий выход генератора:

# example - in reality the generator takes much longer than just outputting an integer.
t = ThreadGenerator(target=range, args=(10,))
t.run()

for _ in num_steps:
    o = t.output
    t.get_next()
    result = computations(o)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...