gpt4 book ai didi

Python 生成器预取?

转载 作者:太空狗 更新时间:2023-10-30 00:28:39 25 4
gpt4 key购买 nike

我有一个生成器,每次迭代都需要很长时间才能运行。有没有一种标准的方法让它产生一个值,然后在等待再次调用时生成下一个值?

每次在 gui 中按下按钮时都会调用生成器,并且希望用户在每次按下按钮后考虑结果。

编辑:解决方法可能是:

def initialize():
res = next.gen()

def btn_callback()
display(res)
res = next.gen()
if not res:
return

最佳答案

如果我想做类似你的解决方法的事情,我会写一个这样的类:

class PrefetchedGenerator(object):
def __init__(self, generator):
self._data = generator.next()
self._generator = generator
self._ready = True

def next(self):
if not self._ready:
self.prefetch()
self._ready = False
return self._data

def prefetch(self):
if not self._ready:
self._data = self._generator.next()
self._ready = True

它比你的版本更复杂,因为我这样做是为了让它处理不调用预取或调用预取太多次。基本思想是在需要下一项时调用 .next() 。当您有“时间”可以消磨时,您可以调用预取。

你的另一个选择是线程..

class BackgroundGenerator(threading.Thread):
def __init__(self, generator):
threading.Thread.__init__(self)
self.queue = Queue.Queue(1)
self.generator = generator
self.daemon = True
self.start()

def run(self):
for item in self.generator:
self.queue.put(item)
self.queue.put(None)

def next(self):
next_item = self.queue.get()
if next_item is None:
raise StopIteration
return next_item

这将与您的主应用程序分开运行。无论获取每次迭代需要多长时间,您的 GUI 都应该保持响应。

关于Python 生成器预取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7323664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com