为什么它会获得额外的数据
Why is it getting extra data
在代码中,我做了一个传播sheet,每 10 秒记录两个随机数,并将数字添加到三行,当满足特定条件时,它可以结束循环,但后来我做到了在循环结束后创建了一个新的 spreadsheet 并且循环再次开始。但是,当循环再次开始时,它会向 sheet 添加带有数字的额外行,而我只是希望它以第一个 sheet 结束时的相同条件结束。我似乎无法弄清楚为什么我会得到额外的充满数字的行
# global variable
globvar = 1
# start generate_random_number function
def generate_random_number():
int1 = random.randint(55, 99)
int2 = random.randint(1, 50)
print('Numbers have been generated')
return int1, int2
# end generate_random_number function
# start create_excel function
def create_excel():
# call global
global globvar
#check file created and not
if(globvar == 1):
wb = Workbook()
wb.remove_sheet(wb.get_sheet_by_name('Sheet'))
wb.create_sheet('Test '+str(globvar))
ws = wb.get_sheet_by_name('Test '+str(globvar))
ws['A1'] = 'Random 1'
ws['B1'] = 'Random 2'
wb.save('sample.xlsx')
print('Document created')
else:
wb = load_workbook('sample.xlsx')
wb.create_sheet('Test '+str(globvar))
ws = wb.get_sheet_by_name('Test '+str(globvar))
ws['A1'] = 'Random 1'
ws['B1'] = 'Random 2'
wb.save('sample.xlsx')
print('Document created')
# end create_excel function
# start update_excel function
def update_excel():
global globvar
wb = load_workbook('sample.xlsx')
ws = wb.get_sheet_by_name('Test '+str(globvar))
ws.append(generate_random_number())
wb.save('sample.xlsx')
print('Spreadsheet updated')
# end update_excel function
# start main function
def main():
global globvar
m = 1
create_excel()
update_excel()
schedule.every(10).seconds.do(update_excel)
loop = True
while loop:
schedule.run_pending()
m += 1
print('Waiting...')
time.sleep(10)
if m == 3:
schedule.run_pending()
loop = False
globvar +=1
#print('Finished program. ' + str(datetime.datetime.now()))
#print('Starting program now.... ' + str(datetime.datetime.now()))
#main()
# end main function
# starts whole script here
print('Starting program now.... '+ str(datetime.datetime.now()))
t = 1
while True:
main()
t += 1
if t == 3:
break
print('Finished program. '+ str(datetime.datetime.now()))
这是因为 globvar 的增量间隔超过 10 秒。将会发生的情况是您有 2 个或更多 update_excel
运行 的未决调用,而不是每个增量调用 1 个。
这并不奇怪,因为您有 10 秒的计划和 10 秒的睡眠时间,这意味着代码执行造成的任何额外延迟都会使循环花费超过 10 秒的时间,并导致您的计划任务排队。
不要使用 schedule.every
,只需将 update_excel
调用直接放入循环即可。
def main():
...
create_excel()
while loop:
update_excel()
time.sleep(10)
m += 1
if m == 3:
globvar += 1
return
在代码中,我做了一个传播sheet,每 10 秒记录两个随机数,并将数字添加到三行,当满足特定条件时,它可以结束循环,但后来我做到了在循环结束后创建了一个新的 spreadsheet 并且循环再次开始。但是,当循环再次开始时,它会向 sheet 添加带有数字的额外行,而我只是希望它以第一个 sheet 结束时的相同条件结束。我似乎无法弄清楚为什么我会得到额外的充满数字的行
# global variable
globvar = 1
# start generate_random_number function
def generate_random_number():
int1 = random.randint(55, 99)
int2 = random.randint(1, 50)
print('Numbers have been generated')
return int1, int2
# end generate_random_number function
# start create_excel function
def create_excel():
# call global
global globvar
#check file created and not
if(globvar == 1):
wb = Workbook()
wb.remove_sheet(wb.get_sheet_by_name('Sheet'))
wb.create_sheet('Test '+str(globvar))
ws = wb.get_sheet_by_name('Test '+str(globvar))
ws['A1'] = 'Random 1'
ws['B1'] = 'Random 2'
wb.save('sample.xlsx')
print('Document created')
else:
wb = load_workbook('sample.xlsx')
wb.create_sheet('Test '+str(globvar))
ws = wb.get_sheet_by_name('Test '+str(globvar))
ws['A1'] = 'Random 1'
ws['B1'] = 'Random 2'
wb.save('sample.xlsx')
print('Document created')
# end create_excel function
# start update_excel function
def update_excel():
global globvar
wb = load_workbook('sample.xlsx')
ws = wb.get_sheet_by_name('Test '+str(globvar))
ws.append(generate_random_number())
wb.save('sample.xlsx')
print('Spreadsheet updated')
# end update_excel function
# start main function
def main():
global globvar
m = 1
create_excel()
update_excel()
schedule.every(10).seconds.do(update_excel)
loop = True
while loop:
schedule.run_pending()
m += 1
print('Waiting...')
time.sleep(10)
if m == 3:
schedule.run_pending()
loop = False
globvar +=1
#print('Finished program. ' + str(datetime.datetime.now()))
#print('Starting program now.... ' + str(datetime.datetime.now()))
#main()
# end main function
# starts whole script here
print('Starting program now.... '+ str(datetime.datetime.now()))
t = 1
while True:
main()
t += 1
if t == 3:
break
print('Finished program. '+ str(datetime.datetime.now()))
这是因为 globvar 的增量间隔超过 10 秒。将会发生的情况是您有 2 个或更多 update_excel
运行 的未决调用,而不是每个增量调用 1 个。
这并不奇怪,因为您有 10 秒的计划和 10 秒的睡眠时间,这意味着代码执行造成的任何额外延迟都会使循环花费超过 10 秒的时间,并导致您的计划任务排队。
不要使用 schedule.every
,只需将 update_excel
调用直接放入循环即可。
def main():
...
create_excel()
while loop:
update_excel()
time.sleep(10)
m += 1
if m == 3:
globvar += 1
return