【问题标题】:Launch a Python Job using "SCHEDULE" for Beginners为初学者使用“SCHEDULE”启动 Python 作业
【发布时间】:2023-08-30 05:33:01
【问题描述】:

我从未编写过 cron 作业或使用 python 中的“SCHEDULE”函数来自动运行程序。所以,我需要一些指导。我的程序运行良好,我需要它在每个月的第 15 天运行 - 所以每年运行 12 次。我尝试通过设置 schedule.every().day.at("7:30").do(job) 将其作为测试运行,但什么也没发生。换句话说,代码没有运行,因为我在 7:30 下面配置了它。同样,我需要在每个月的第 15 天运行它。我是否需要重新排列我的代码部分(行)以使该脚本按预期自动运行?谢谢,

我的代码如下所示:

import psycopg2
import pandas as pd
from sys import exit
from tabulate import tabulate
import schedule
import time

#schedule 
def job():
    print("I'm working...")

schedule.every().month.at("15").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

from datetime import datetime
start_time = datetime.now()
pd.set_option('display.max_columns', None)
#My code runs below from here....

代码未显示

end_time = datetime.now()
print('Duration: {}'.format(end_time - start_time))

exit()

【问题讨论】:

    标签: python cron schedule


    【解决方案1】:

    您的代码的计划部分在作业功能中。所以不要把只能执行一次的动作放在里面(比如pd.set_option或者import

    import psycopg2
    import pandas as pd
    from sys import exit
    from tabulate import tabulate
    import schedule
    import time
    from datetime import datetime
    pd.set_option('display.max_columns', None)
    
    #schedule 
    def job():
        print("I'm working...")
        #Put your code here
        start_time = datetime.now()
        # Some more code
        end_time = datetime.now()
        print('Duration: {}'.format(end_time - start_time))
    
    
    schedule.every().month.at("15").do(job)
    
    while True:
        schedule.run_pending()
        time.sleep(1)
    

    您应该删除exit(),因为它会在执行一次后终止您的进程。

    但在您的情况下,我怀疑您是否希望一整年都有一个 python 进程来触发每个月的操作。使用 unix crontab 来执行你的 python 脚本似乎更合适,你可以从你的代码中删除所有的调度逻辑。

    【讨论】:

    • 谢谢 - 假设我可以启动并运行一个 python 进程,这样程序就会自动启动。那会是什么样子 - 或者我将如何修改上面的代码?那是我不理解的部分 - 启动程序以及如何执行它..
    • 对不起,我看错了你的代码,你有while True 可以让你的工作继续运行,所以这部分没问题。要运行它,请打开终端并执行 python script.py(或您的脚本名称)
    • 好的!所以,我可以保留上面的代码并按照终端的建议调用脚本?
    • 您的脚本只会打印“我正在工作...”,因为调度程序只会执行作业功能。所以把你的代码放在那里,你可以在终端中启动它。我编辑我的答案,因为它不正确
    最近更新 更多