问题描述
我一直在尝试查看是否可以使用python schedule
模块通过遍历文件中的行(例如,每10秒间隔发送下一个)来将数据吸收到数据库的过程错开从输入文件到数据库的数据行。我还没有实现它,因此试图使该原理适用于一个更简单的问题。我无论如何都不是经验丰富的程序员
如果我在下面的代码中用t1
注释掉,则通过两个函数传递一个数字列表,该代码生成将列表中的每个值乘以2的预期结果。
import schedule
import time
def the_calc(i):
j = i * 2
print(j)
return j
def gen_newlist(list):
newer_list = []
print(list)
for i in list:
## t1
# res = schedule.every(10).seconds.do(the_calc,i)
# newer_list.append(res)
# while True:
# schedule.run_pending()
# time.sleep(1)
## t2
res = the_calc(i)
newer_list.append(res)
return newer_list
if __name__ == '__main__':
list = [2,4,6,8,10]
new_list = gen_newlist(list)
print(new_list)
如果我注释掉t2
并取消注释t1
上的代码,其中包括我认为对于schedule
模块是正确的语法,我希望输入列表中的每个数字都可以再次乘以2,但间隔为10秒。
实际上,列表以10秒的间隔处理,但是似乎只有列表中的第一个值被重复拾取并传递给the_calc
函数,导致该值被打印到控制台中,而且不会重复5次,即列表的长度。
这可能是我的代码中的一个简单遗漏或错误,我希望有人可以指出我正确的方向。
解决方法
查看此行:
schedule.every(10).seconds.do(the_calc,i)
现在让我们尝试了解这行的内容。
此行告诉调度程序用户希望每10秒调用一个值为the_calc
的函数i
。因此,它每10秒钟执行一次相同的操作,并且永远不会退出while
循环,这就是为什么它永远不会达到列表的第二个值的原因。
我对schedule
模块不熟悉,所以我不知道如何使用此模块,但是您可以使用time.sleep
来完成。另外,如果您不想阻塞主线程,可以将threading
与之配合使用。谢谢。如有任何疑问,请发表评论。