我需要向400个客户发送自定义电子邮件。
我正在这样做:
for (Client c : clients){
setUpEmail(c);
sendMail(c);
}
我的问题是我的电子邮件提供商授权我每分钟仅发送10封电子邮件。我该如何在循环中做到这一点? 谢谢。
答案 0 :(得分:1)
RateLimiter
。如果您的库路径中已有番石榴,或者您有兴趣添加番石榴,则可以使用以下解决方案:
RateLimiter rateLimiter = RateLimiter.create(10/60d); // 10 permits per 60 seconds.
for (Client c : clients){
setUpEmail(c);
rateLimiter.acquire(1);
sendMail(c);
}
您遇到的问题正是创建RateLimiter
的原因。
答案 1 :(得分:0)
使用计数器,等待一分钟,当发送十封邮件时:
import pyspark.sql.functions as psf
df.select(psf.to_timestamp(psf.col('t'), 'MMM-YY HH:mm:ss').alias('dt'))
这不理想,因为您可能会浪费一些时间,例如当发送十封邮件需要20秒时,您只能等待40秒才能开始新的批量发送。
另一种选择是在每封邮件之间等待,以便10封邮件的时间至少为60秒:
Jan-17
还有一种更复杂的方法:
2017-01-01
答案 2 :(得分:0)
Deque clientsDeque = new ArrayDeque(clients);
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () => {
for (int i=0; i<10; i++){
Client c = clientsDeque.poll();
setUpEmail(c);
sendMail(c);
}
}
executor.schedule(task, 60, TimeUnit.SECONDS);