首页 > 解决方案 > 在 Python 中通过数组调用时,调度时间被调度模块覆盖

问题描述

我正在尝试构建一个警报应用程序,但我正在努力让“计划”模块按我想要的方式运行。问题是,在通过数组调用 day 属性时,我似乎无法为一天安排多个警报。

您通常如何安排一天多次的示例:

schedule.every().sunday.at('17:25').do(job)
schedule.every().sunday.at('17:30').do(job)
schedule.every().sunday.at('17:35').do(job)

这很好用,但我真的想用 for 循环加载时间,所以我没有巨大的 if 语句,这样我就可以动态加载时间:

dayArray = [
schedule.every().sunday,
schedule.every().monday,
schedule.every().tuesday,
schedule.every().wednesday,
schedule.every().thursday,
schedule.every().friday,
schedule.every().saturday
]

for i in range(1, xlsxAlarmSheet.ncols):
                for j in range(1, 8):
                    if(str(xlsxAlarmSheet.cell_value(j, i)) != '0'):
                        dayArray[j - 1].at(str(xlsxAlarmSheet.cell_value(j, i))[:2] + ':' + str(xlsxAlarmSheet.cell_value(j, i))[2:]).do(job)

通过 XLRD 模块从数组中加载天数,从 xlsx 文件中加载时间。唯一的问题是当我安排一天多次时,警报会以某种方式相互覆盖。例如,如果我使用这种方法为星期日安排 3 次,则只有第三次安排的时间会触发。我认为这一定是因为当我将日期加载到数组中时,它们不再是唯一的,所以我尝试做一个二维数组:

dayArray = [[
schedule.every().sunday,
schedule.every().monday,
schedule.every().tuesday,
schedule.every().wednesday,
schedule.every().thursday,
schedule.every().friday,
schedule.every().saturday
]] * (xlsxAlarmSheet.ncols - 1)

for i in range(1, xlsxAlarmSheet.ncols):
                for j in range(1, 8):
                    if(str(xlsxAlarmSheet.cell_value(j, i)) != '0'):
                        dayArray[i - 1][j - 1].at(str(xlsxAlarmSheet.cell_value(j, i))[:2] + ':' + str(xlsxAlarmSheet.cell_value(j, i))[2:]).do(job)

没有运气......时代仍然相互覆盖,有什么想法吗?

标签: pythonarraysschedule

解决方案


免责声明:0 Python经验,只有JavaScript....但是...

尽量不要像这样在对象数组中调用函数:

dayArray = [[
schedule.every().sunday,
...

取而代之的是当天的名称(唯一不同的部分)

dayArray = [[
'sunday', 'monday', ...

然后在构建函数时在 for each 中使用该字符串名称

for each .... { schedule.every()[dayArray[i]].at(...).do(...) }

我的随机猜测是,以这种方式存储时它会以某种方式被错误地调用,只需存储不同的部分(日期名称),因为您可以在循环中调用该函数的其余部分(因为它对所有人都是一样的)。

希望这是有道理的。不知道它是否会起作用,只是尝试一下。祝你好运。


推荐阅读