如何安排python代码每天运行?

Posted

技术标签:

【中文标题】如何安排python代码每天运行?【英文标题】:how to schedule a python code to run daily? 【发布时间】:2021-09-27 17:56:32 【问题描述】:
def job():
# Define variables 
  tickers = "AAPL GOOGL"
  start = "2021-08-01"
  end = date.today()
  tickers_split = tickers.split()
  df = pd.DataFrame()
  tickers_split
  for ticker in tickers_split:
      data = pdr.get_data_yahoo(ticker, start=start, end=end, interval='d')
      df[ticker] = data['Adj Close']
  print(df.shape)
  display(df)
  df.to_csv(r'path.csv')

schedule.every().day.at("11:10").do(job)
while True:
   schedule.run_pending()
   time.sleep(1)

我有上面的代码来提取股票数据,然后将其保存在我的本地路径中,并希望使其每天在特定时间自动运行。我正在使用时间表,但它没有做它应该做的事情。我需要打开代码才能运行吗?如果是这样,执行 python 代码的选项是什么?让它们打开或让我的计算机一直保持清醒?

【问题讨论】:

【参考方案1】:

您的操作系统可能为此提供了job scheduler(一个在后台运行并可以为您执行这些调度任务的应用程序)。

典型的工具是cron 用于 Mac 和 Linux,windows task scheduler 用于 Windows。您还可以查看其他可用的或更易于使用的包装器。

请务必注意,作业调度程序只能在您的计算机开启时运行。如果您需要可以 24/7 全天候运行的东西,您可能会寻找云提供商等,它们通常会提供自己的调度服务。

【讨论】:

我试图避免使用任务调度程序,正如你所说,cron 不适合我的系统。我希望时间表能奏效。我想知道为什么它不做它应该做的事情。 要启动一个程序,您必须有一个程序来确定是否该启动它,并执行代码来启动它。这意味着您需要一个在后台运行的程序,或者一个在后台运行的现有程序。另一个选项是launch the script on startup 并让脚本在后台运行。 See here 提供多种解决方案。 好的,我决定使用任务调度程序,但它不起作用。我一直在看网上的每一个解释,仍然是在指定时间启动 dsnt 的时间表。我在想是不是因为我在我的脚本中导入包?我发现的几乎所有示例都是没有导入的简单脚本。如果是这样,那么安装包的代码有哪些选项? 包应该可以工作。运行一个小脚本来隔离问题可能会有所帮助;如果小脚本正常工作,则意味着您的代码中存在错误。如果小脚本不起作用,则意味着您配置任务调度程序的方式存在问题。【参考方案2】:

规定的方法是将 python 代码放入 AWS Lambda 中,然后让带有 cron 表达式的 AWS Cloudwatch 事件按计划调用 AWS Lambda,然后将结果保存在 S3 或某些数据存储中。

无论从运营角度还是从成本角度来看,以上都是最便宜的选择,因为您只需在 AWS Lambda 执行时为其付费。

【讨论】:

【参考方案3】:

这个视频帮助我解决了同样的问题:

https://www.youtube.com/watch?v=aqnJvXOIr6g&ab_channel=KeithGalli

因为我不想让我的笔记本电脑一直运行,所以我使用了 AWS 设置。但我认为这也可以与其他托管选项一起使用,您可以在其中安装您的调度程序。

【讨论】:

以上是关于如何安排python代码每天运行?的主要内容,如果未能解决你的问题,请参考以下文章

安排每天运行 2 次的任务 [重复]

如何安排python脚本在aws中按预定时间间隔运行

如何使用调度包安排python作业每小时准确运行[重复]

撩课-Python-每天5道面试题-第2天

Python 在每天定义的时间运行一段代码

如何安排 python 脚本从 anaconda 运行?