for循环中的python调度程序

问题描述

我一直在尝试查看是否可以使用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与之配合使用。谢谢。如有任何疑问,请发表评论。