我有一个生成器,该生成器从磁盘读取一些内容,在CPU上进行一些计算,然后将其移至GPU后产生结果。然后在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)