Python 为什么代码在预期完成之前停止
我正在使用以下函数获取一个刮片作业,该作业从上午9点开始,预计在下午4点停止。但它在这之前就停止了,与我期望的相反。 假设刮片作业在Python 为什么代码在预期完成之前停止,python,python-2.7,urllib2,Python,Python 2.7,Urllib2,我正在使用以下函数获取一个刮片作业,该作业从上午9点开始,预计在下午4点停止。但它在这之前就停止了,与我期望的相反。 假设刮片作业在t=1运行,并在t=t完成。如果T
t=1运行,并在t=t
完成。如果T<1秒
,则它会休眠(1-T)秒
。睡眠后,它会重复擦伤循环。循环从上午9点开始,预计在下午4点停止
使用nosleep=False
时,它不会立即终止,而是运行一段时间,最终不会将任何新数据写入csv
,尽管函数不会退出
如果通过设置nosleep=True
移除睡眠时间(1-T)秒
,则其运行正常
请让我知道这个碎片出了什么问题
编辑:当移植到Python 3.4时,同样可以正常工作,即当nosleep=False
时,它不会停止刮取。早期版本是在Python 2.7中执行的
def getOCdata(ed = '25FEB2016', start = 540*60, stop = 960*60, waitFlag = True, nosleep = True):
ptime = datetime.now()
while True:
if (ptime.hour*60*60 + ptime.minute*60 + ptime.second) > stop:
break
else:
try:
ptime = datetime.now()
scrapedata = pd.DataFrame(scrapefn(ed))
scrapedata = scrapedata.ix[:, 1:21]
scrapedata['timestamp'] = ptime
scrapedata.to_csv(datafile, index=False, mode='a', header=False)
if nosleep == False:
end = datetime.now()
tdiff = end-ptime
time.sleep(1 - (tdiff.seconds + tdiff.microseconds*1.0/10**6))
except:
continue
return 0
您可以通过将终止条件从if
移动到,而本身(否定)来简化代码。@tobias_k行(ptime.hour*60*60+ptime.minute*60+ptime.second)
计算从凌晨12点开始经过的秒数,然后将其与stop
条件进行比较,即如果时间超过下午4点。是的,在终止时,if可以移动到。