Python 每 60 秒执行 5 次迭代的 while 循环

Python while loop that does 5 iterations every 60 seconds

我有一个 python 函数,它从 alphavantage.co 请求外汇数据。但是我遇到的问题是我需要请求在每 5 次迭代后“暂停”60 秒,因为 alphavantage 文档规定我每分钟只能发出 5 次请求。

我曾尝试构建一个简单的 while 循环,因为我认为这是最好的方法,但我没有成功。我构建的 while 循环对第一个元素执行 6 次迭代,休眠 5 秒并退出循环。这是它的样子

import time
items = ['A','B','C','D','E','F','G','H','I']
n = 0
for i in items:
    while n < 6:
        print(i)
        n = n + 1
    else:
        time.sleep(5) # Delay for 5 seconds (5 seconds).

输出:

A
A
A
A
A
A

这是我所期望的:

A
B
C
D
E
# delay for 5 seconds
F
G
H
I
# exit loop

我对 while 循环的了解显然是有限的。我很感激这方面的帮助。即使是完全不同的方法,只要我可以在一定次数的迭代后将循环暂停一定时间即可。如果你想看看我在这个

上的实际功能

这应该符合您的描述:

for n,i in enumerate(items):
    print(i)
    if n%5 == 4:
        time.sleep(5) # Your text said 60 seconds, but your code said 5

当您处于 while 循环中时,i 从未改变。如果您希望结果像您预期的那样,您可以这样做:

import time
items = ['A','B','C','D','E','F','G','H','I']
n = 0
for i in items:
    print(i)
    n = n + 1
    if n % 5 == 0 and n != 1:
        time.sleep(5) # Delay for 5 seconds (5 seconds).

甚至不使用 while 循环。

当然,如果您想暂停 60 秒,只需在 time.sleep() 函数中更改即可。

您的 while 循环没有任何意义。您需要检查您的迭代以及它是否可以被 5 个睡眠整除。要获取迭代的索引,您可以使用 enumerate 函数:

import time
items = ['A','B','C','D','E','F','G','H','I']

for i, item in enumerate(items):
    print(item)
    if i % 5 == 4: # each fifth iteration
        time.sleep(60)

另一种方法是每次迭代休眠 12 秒:

import time
items = ['A','B','C','D','E','F','G','H','I']

for item in items:
    print(item)
    time.sleep(12)