我正在使用拉取队列和推送队列来管理我调用Amazon SES发送电子邮件的速率。我注意到,在10个收件人的样本列表中,一些收件人将收到重复的电子邮件,而其他收件人收到0.电子邮件总数仍然相当于10封电子邮件。
这是我目前的设置。
以下是发送电子邮件工作人员的代码。我记录了“data”变量在传递到send_announce_email函数之前的含义。
import ses
class SendEmailWorker(webapp2.RequestHandler):
def post(self):
payload = json.loads(self.request.get('data'))
# The value of payload is {'email': 'bob@gmail.com', 'campaign': 'version_a'}
CAMPAIGNS = ses.CAMPAIGNS
data = CAMPAIGNS[payload['campaign']]
data['campaign'] = payload['campaign']
data['email'] = payload['email']
logging.info('Data before ses function: %s' % data)
ses.send_announce_email(data)
这是ses.py中ses.send_announce_email的代码。我做的第一件事就是记录“数据”是什么。
CAMPAIGNS = {'version_a': {'subject': 'Email subject line 1'},
'version_b': {'subject': 'Email subject line 2'},
'version_c': {'subject': 'Email subject line 3'}}
def send_announce_email(data):
logging.info('Data during ses function: %s' % data)
text_template = render_template('emails/announce_2.txt', data=data)
html_template = render_template('emails/announce_2.html', data=data)
send_email(
sender='Hello <hello@example.com>',
subject=data['subject'],
body=html_template,
to_addresses=data['email'],
format='html',
reply_addresses='hello@example.com',
text_body=text_template)
令我难以理解的是,在将数据传递给发送功能之前和发送功能的开头之前,我记录了什么是“数据”。它们通常是平等的,但大约20%的时间,它们是不同的!
当我将max_concurrent_requests设置为1时,我没有看到这种情况发生。由于并发,变量值是否会混淆?
此外,在send_announce_email函数中记录的电子邮件地址与Amazon SES实际发送到的电子邮件地址不匹配。某些收件人可能会收到重复的电子邮件。我正在使用boto ses库。