如何在PythonEverywhere免费让Flask应用24/7持续运行?
在PythonEverywhere免费环境中持续运行股票监控脚本
首先明确:你的代码本质是定时执行的股票监控脚本,并未用到Flask的Web服务功能,无需按Flask应用部署,通过平台定时任务即可实现持续运行。但PythonEverywhere免费版有进程运行时长限制,需调整代码逻辑适配。
一、适配免费版限制的代码调整
PythonEverywhere免费版后台进程单次运行最长仅1小时,无限while True循环会被强制终止。因此需修改代码,让脚本每次运行完成一轮所有股票检查后自动退出,再通过定时任务定期触发执行。
修改后的代码如下:
import yfinance as yf from datetime import datetime, timedelta import pandas as pd import smtplib from email.mime.text import MIMEText sender = "email@gmail.com" recipients = ["email@gmail.com", "email@gmail.com"] password = "[Password]" def send_email(subject, body): msg = MIMEText(body) msg['Subject'] = subject msg['From'] = sender msg['To'] = ', '.join(recipients) with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server: smtp_server.login(sender, password) smtp_server.sendmail(sender, recipients, msg.as_string()) print("Message sent!") tickers = ['IWD', 'IWF', 'IWS', 'IWP', 'IWN', 'IWO', 'IWB', 'IWM', 'IWB', 'IWR'] # 去掉无限循环,单次执行所有ticker检查 for ticker in tickers: try: print("=====================================", ticker.upper(), "==" ,datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "=====================================") stock = yf.Ticker(ticker) # 获取1年历史数据 end_date = datetime.now().strftime('%Y-%m-%d') start_date = (datetime.now() - timedelta(days=365)).strftime('%Y-%m-%d') end_date_2 = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d') start_date_2 = (datetime.now() - timedelta(days=366)).strftime('%Y-%m-%d') hist1 = stock.history(period="1y", interval="1h", start=start_date, end=end_date) hist2 = stock.history(period="1y", interval="1h", start=start_date_2, end=end_date_2) # 计算年度价格变化 price_change_1 = (hist1['Close'].iloc[-1] - hist1['Close'].iloc[0]) / hist1['Close'].iloc[0] * 100 price_change_2 = (hist2['Close'].iloc[-1] - hist2['Close'].iloc[0]) / hist2['Close'].iloc[0] * 100 # 计算标准差和均值 stddev_1 = hist1['Close'].std() stddev_2 = hist2['Close'].std() mean_1 = hist1['Close'].mean() mean_2 = hist2['Close'].mean() # 触发提醒逻辑 if mean_1 > mean_2 + (2 * stddev_2): subject = f"Price Alert for {ticker}" body = f"You have an alert for {ticker}.\n" send_email(subject, body) except Exception as e: print(f"Error processing {ticker}: {str(e)}") continue
二、设置PythonEverywhere定时任务
- 登录PythonEverywhere账号,进入Tasks页面
- 点击「Create a new task」创建新任务
- 配置执行频率:根据需求选择,比如每15分钟、每小时执行一次(免费版支持最小15分钟间隔)
- 在「Command」输入框中填写脚本执行命令,格式为:
示例:python3 /home/你的用户名/脚本存放路径/修改后的脚本文件名.pypython3 /home/ali/stock_monitor.py - 保存任务,系统会按设定时间自动触发脚本执行
三、额外注意事项
- 免费版任务执行日志可在Tasks页面查看,用于排查运行错误
- Gmail账号若开启两步验证,需使用应用专用密码替代原密码,避免登录失败
- 建议添加日志记录功能,将运行状态、错误信息写入文件,方便后续排查
内容的提问来源于stack exchange,提问作者Ali Asadullah Shah
相关产品推荐
相关产品推荐

