Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for循环中的python调度程序_Python_Loops_Scheduler - Fatal编程技术网

for循环中的python调度程序

for循环中的python调度程序,python,loops,scheduler,Python,Loops,Scheduler,我一直在尝试使用pythonschedule模块,通过循环文件中的行,例如每隔10秒将输入文件中的下一行数据发送到数据库中,来错开对数据库的数据摄取。我还没能实现它,所以我试着让这个原理在一个更简单的问题上起作用。我无论如何都不是一个有经验的程序员 如果我运行下面的代码并注释掉t1,我将通过两个函数传递一个数字列表,代码将生成列表中每个值乘以2的预期结果 import schedule import time def the_calc(i): j = i * 2 print(

我一直在尝试使用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
处的代码,其中包括我认为对
计划
模块正确的语法,我希望输入列表中的每个数字将再次乘以2,但间隔为10秒

事实上,列表每隔10秒处理一次,但似乎只有列表中的第一个值被反复拾取并传递给_calc函数,从而导致值被打印出控制台,并且在5次迭代后不会停止,这是列表的长度

这可能是我代码中的一个简单的遗漏或错误,我希望有人能给我指出正确的方向。

请看这行:

schedule.every(10).seconds.do(the_calc, i)
现在让我们试着理解这条线在做什么

这一行告诉调度程序,用户希望每隔10秒调用一个值
i
的函数
the_calc
。因此,它每10秒做一次相同的事情,并且永远不会退出
while
循环,这就是为什么它永远不会达到列表的第二个值


我不熟悉
计划
模块,因此我不知道如何使用此模块,但您可以使用
time.sleep
来执行此操作。另外,如果不想阻止主线程,可以使用
线程化
。谢谢如果您有任何疑问,请发表评论。

为什么您不在
t2
部分使用
time.sleep(10)
?我从未想到过。我刚刚将'time.sleep(10)'放在'res=the_calc(I)'上面,代码实现了我所希望的..没有调用调度模块。。谢谢,我现在看到了问题所在,我没有从循环中走出来。我必须想出办法,然后转到下一个I。上面评论中的选项以及您提到的使用time.sleep似乎确实有效,放在
t2
部分,很高兴它有所帮助。我不确定是否使用
时间。睡眠
是最好的方法,但它会起作用。