python 新手请教一个应该很简单的小功能

2016-12-29 10:24:05 +08:00
 RandomUser
想写一个脚本实时监控秒杀列表中指定商品的库存,并发邮件提醒
目前有两个问题:
1. 程序使用最下方注释掉的代码,这样每个商品都要重复写几行语句,能正常运行,但是在有多个商品符合条件时发送邮件后提示“ connection unexpectedly closed ”,好像是 smtp 的问题?
2. 把那几条语句封装一下,即现在用的 check 函数,但是后台只看到 goodName1 在运行, goodName2 根本没执行?



#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
import requests, re, json, threading
from threading import Timer
import time
import sys, os

reload(sys)
sys.setdefaultencoding('utf8')


def send_mail(to_list, sub, content):
...

class Buy(object):
stockNum = 0
totalStockNum = 0

def __init__(self, name):
self.goodsName = name

def check_stock(self):
r1 = requests.get()
listNum = len(r1.json()["data"]["list"])

for i in range(1, listNum, 1):
goodName = r1.json()["data"]["list"][i - 1]["goodsName"]
if self.goodsName in goodName:
stock = r1.json()["data"]["list"][i - 1]["stockNum"] #获取当前可售库存
total = r1.json()["data"]["list"][i - 1]["totalStockNum"] #获取当前总库存
add = total - self.totalStockNum #计算本次新增库存
if stock <> 0 and stock > self.stockNum:
send_mail(mailto_list, goodName + str(stock), str(add))
print "send success"
self.stockNum = stock
self.totalStockNum = total


def check(goodName):
p1 = Buy(goodName)
while True:
timer1 = threading.Timer(5, Buy.check_stock, (p1,))
timer1.start()
timer1.join()


if __name__ == '__main__':
check("goodName1")
check("goodName2")

# p1 = Buy("goodName1")
# p2 = Buy("goodName2")

# while True:
# timer1 = threading.Timer(5, Buy.check_stock, (p1,))
# timer2 = threading.Timer(5, Buy.check_stock, (p2,))
# timer1.start()
# timer2.start()
1729 次点击
所在节点    问与答
3 条回复
jotsai
2016-12-29 12:25:51 +08:00
第 1 个线程启动之后就 join 了,这时候会等第 1 个线程执行完才会接着启动第 2 个线程。
你需要先将两个线程都启动之后,再对两个线程 join 。
RandomUser
2016-12-29 12:52:30 +08:00
@jotsai 意思是我还是得像注释里的代码一样每个商品都单独重复写那几条语句?类似这种每隔几秒还有其他的实现方式吗?


# timer1.join()
# timer2.join()
jotsai
2016-12-29 12:56:55 +08:00
@RandomUser 看下 python 的线程池,应该可以解决你的问题

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

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

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

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

© 2021 V2EX