假设我有一个在循环中被反复调用的方法。
for user in users:
send_email(user)
但既然我想减少拥堵,我想要像这样的东西。
for user in rate_limit(per_min=50, users):
send_email(user)
其中,rate_limit
函数只是休眠,一旦达到速率限制,就再次从users
开始让步。
# something like this, where it just sleeps (until next min/sec cycle)
# once the number of iterations per_min or per_sec have been achieved.
def rate_limit(per_min=None, per_sec=None, objects):
...
我面临的问题是我不知道如何在当前的方法中保持状态(例如已经过去的时间量或发送的电子邮件数量)。我将非常感谢任何关于如何解决这个问题的建议或想法。
2条答案
按热度按时间f0ofjuux1#
您可能正在查找
time.sleep()
:1.产出一个对象
1.睡眠
1.从步骤1开始重复
例如:
问题是我不知道如何在此表单中保留状态(在已用时间/已发送电子邮件的意义上)。
这将自动保存状态,因为
yield
只是暂停函数并在函数再次调用后继续。如果您想知道所用的时间和发送的邮件数量,您可以简单地添加一个计数器:jdgnovmf2#
只需使用
time.sleep
,它将在给定的秒数内挂起当前线程。