为什么它会获得额外的数据

时间:2016-12-13 01:56:32

标签: python-3.x openpyxl

在代码中,我制作了一个电子表格,每10秒记录两个随机数,并将数字添加到三行,当满足某个条件时,它可以结束循环,但后来我做了以便循环结束后新的电子表格已创建,循环再次开始。然而,当循环再次开始时,它会向工作表添加额外的行数,当我只是希望它以第一个工作表结束时的相同条件结束时。我似乎无法弄清楚为什么我会得到额外的行数字

# 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()))

1 个答案:

答案 0 :(得分:1)

这是因为在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