首页
注册
登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请
登录
V2EX 提问指南
广告
V2EX
›
问与答
python 新手请教一个应该很简单的小功能
RandomUser
·
2016-12-29 10:24:05 +08:00
· 1669 次点击
这是一个创建于 2724 天前的主题,其中的信息可能已经有所发展或是发生改变。
想写一个脚本实时监控秒杀列表中指定商品的库存,并发邮件提醒
目前有两个问题:
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()
stock
import
threading
JSON
3 条回复
•
2016-12-29 12:56:55 +08:00
1
jotsai
2016-12-29 12:25:51 +08:00
第 1 个线程启动之后就 join 了,这时候会等第 1 个线程执行完才会接着启动第 2 个线程。
你需要先将两个线程都启动之后,再对两个线程 join 。
2
RandomUser
OP
2016-12-29 12:52:30 +08:00
@
jotsai
意思是我还是得像注释里的代码一样每个商品都单独重复写那几条语句?类似这种每隔几秒还有其他的实现方式吗?
# timer1.join()
# timer2.join()
3
jotsai
2016-12-29 12:56:55 +08:00
@
RandomUser
看下 python 的线程池,应该可以解决你的问题
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
2568 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms ·
UTC 12:13
·
PVG 20:13
·
LAX 05:13
·
JFK 08:13
Developed with
CodeLauncher
♥ Do have faith in what you're doing.