gpt4 book ai didi

Python 显式 next() 比多线程生产者-消费者范式中的 for 循环慢

转载 作者:行者123 更新时间:2023-12-01 02:45:23 25 4
gpt4 key购买 nike

假设我有以下代码,运行 10 次迭代并调用生成器 gen_next_img_batch:

for _ in get_next_img_batch(train_data_paths, classes, batch_size):
pass

现在,假设我将其替换为以下等效的(在我看来)迭代:

for i in range(10):
next(get_next_img_batch(train_data_paths, classes, batch_size))

我遇到的难题是第一个片段需要 17 秒,而第二个片段需要 42 秒。此外,第二个片段的每次迭代都比前一次迭代花费更多时间。也就是说,第二个片段的迭代 i+1 花费的时间比迭代 i 更长。第一个片段的所有迭代都花费相同的时间。

一个重要的事实似乎是,迭代的生成器gen_next_img_batch从后台线程中不断填充的Python队列中获取数据。更具体地说,在后台,一个单独的线程正在将数据加载到队列中,并且每次调用 next() 都会从该队列中生成一个对象。当省略此异步行为时,两个片段将花费相同的时间。

最佳答案

它们并不等同。具体来说,您的第一个片段调用 get_next_img_batch() 一次,而第二个片段调用该函数 10 次。等效的片段可能是:

it = get_next_img_batch(train_data_paths, classes, batch_size))
for i in range(10):
next(it)

关于Python 显式 next() 比多线程生产者-消费者范式中的 for 循环慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45312202/

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