预计算返回的Python迭代器(排队)
我有一个python迭代器,每次迭代都会解决一个耗时的任务。如果迭代器的返回值可以在后台预计算,这样在调用迭代器时,就可以立即生成结果,那就太好了预计算返回的Python迭代器(排队),python,iterator,queue,multiprocessing,yield,Python,Iterator,Queue,Multiprocessing,Yield,我有一个python迭代器,每次迭代都会解决一个耗时的任务。如果迭代器的返回值可以在后台预计算,这样在调用迭代器时,就可以立即生成结果,那就太好了 from multiprocessing import Process, Queue import numpy as np import time def sample_iterator(): while True: x = np.random.rand(int(1e8)).mean() yield x d
from multiprocessing import Process, Queue
import numpy as np
import time
def sample_iterator():
while True:
x = np.random.rand(int(1e8)).mean()
yield x
def precomputing_iterator(iterator, maxsize = 5):
def enqueue(q):
while True:
q.put(iterator.next())
q = Queue(maxsize = maxsize)
p = Process(target=enqueue, args=(q,))
p.start()
while True:
yield q.get()
i1 = sample_iterator()
i2 = precomputing_iterator(i1)
t = time.time()
i2.next()
print "execution time:", time.time() - t
time.sleep(3)
t = time.time()
i2.next()
print "execution time:", time.time() - t
乙二醇
这里是一个迭代器(预计算迭代器
),它将迭代器(示例迭代器
)作为输入<代码>预计算迭代器预计算示例迭代器
的返回值。创建预计算迭代器
时,立即开始对示例迭代器
的返回值进行预计算。返回值保存在多处理.Queue
对象上。如果队列中有值,预计算迭代器
可以立即生成它们
from multiprocessing import Process, Queue
import numpy as np
import time
def sample_iterator():
while True:
x = np.random.rand(int(1e8)).mean()
yield x
def precomputing_iterator(iterator, maxsize = 5):
def enqueue(q):
while True:
q.put(iterator.next())
q = Queue(maxsize = maxsize)
p = Process(target=enqueue, args=(q,))
p.start()
while True:
yield q.get()
i1 = sample_iterator()
i2 = precomputing_iterator(i1)
t = time.time()
i2.next()
print "execution time:", time.time() - t
time.sleep(3)
t = time.time()
i2.next()
print "execution time:", time.time() - t
这里对我来说,第一次执行时间是1.4秒(队列是空的,没有预先计算的返回值)。第二次执行时间为0.00031秒(预计算结果刚刚返回)请告诉我问题不清楚的原因,以便我在投票否决时对其进行编辑和改进!