Python 变量控制问题

2016-02-28 20:50:21 +08:00
 ElegantOfKing

假如我监控某一个商品网页中的某个属性,当发现它从“ True ”变为“ False ”的时候,我调用 emai 控件发送一封邮件给目标邮箱。

那么问题来了:
假如我把这个程序放在服务器上,每 2 秒中对目标网页进行监视,那么在该商品未下架之前,程序将会一直以 2 秒钟为时间,向目标用户发送邮件。

请问大家有什么思路来解决这个问题,使得只发送一封邮件吗?

我初步的想法是一旦发送一封邮件后,直接将该属性强制改为'True',但是获取网站信息之后,仍然会变为'False',没有一点思路......

2647 次点击
所在节点    Python
12 条回复
est
2016-02-28 20:52:31 +08:00
再立一个 is_sent 的 flag 就行了。
ElegantOfKing
2016-02-28 20:54:34 +08:00
@est 能否麻烦您说得详细一点?我现在还一头雾水,想不到什么具体的思路 。
zangxixi
2016-02-28 21:01:13 +08:00
可以用数据库保存信息呀,每次发送邮件后就保存下,每次判断的时候就到数据库查一把
billgreen1
2016-02-28 21:48:07 +08:00
email_sent = False
item_attribute = True
should_send_email = (not item_attribute) and (not email_sent)

if should_send_email:
send_email(mail_content):
email_sent = True
gamexg
2016-02-29 08:19:51 +08:00
你需要保存商品的状态,如果这次抓取时和上次保存的一致就直接跳过。
ElegantOfKing
2016-02-29 12:23:34 +08:00
@billgreen1
按照您的操作,做了个小测试,发现还是继续运行啊。

def send_mail():
print('已经发送短信!')


email_sent = False
item_ = False
should_send_email = (not email_sent) and (not item_)

while True:
if should_send_email:
send_mail()
email_sent = True
ElegantOfKing
2016-02-29 12:24:10 +08:00
@gamexg

谢谢提供思路,我尝试一下
billgreen1
2016-02-29 12:35:19 +08:00
@ElegantOfKing 你可以把 should_send_mail 定义为函数
def should_send_mail(email_sent, item_):
return (not item_) and (not email_sent)

在 while 循环里面,
while True:
if should_send_email(email_sent, item_):
send_mail()
email_sent = True
ElegantOfKing
2016-02-29 19:08:43 +08:00
@zangxixi 这个思路感觉有点 BUG 。假如我发送邮件后存到了数据库,再次发送的时候,向数据库查询。假如说该商品再次缺货,然后再次上架,估计有点难处理。
ElegantOfKing
2016-02-29 19:09:00 +08:00
@billgreen1 感谢您的回复,我尝试一下`
ElegantOfKing
2016-02-29 20:02:15 +08:00
@billgreen1
额,貌似有点问题?
当我正确运行一次后, email_sent 变为 True ,这点可以实现。
但是一旦 email_sent 变为 True 之后,无论 item_变量怎么改变, should_sent_mail()函数会一直 return False 。那么就意味着这个程序,只能运行一次?
edwardlol
2016-02-29 20:20:21 +08:00
@ElegantOfKing 按照这个逻辑 应该要在改变 item_的时候同时改变 email_sent 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/259701

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX