You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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定时任务

  1. 登录PythonEverywhere账号,进入Tasks页面
  2. 点击「Create a new task」创建新任务
  3. 配置执行频率:根据需求选择,比如每15分钟、每小时执行一次(免费版支持最小15分钟间隔)
  4. 在「Command」输入框中填写脚本执行命令,格式为:
    python3 /home/你的用户名/脚本存放路径/修改后的脚本文件名.py
    
    示例:python3 /home/ali/stock_monitor.py
  5. 保存任务,系统会按设定时间自动触发脚本执行

三、额外注意事项

  • 免费版任务执行日志可在Tasks页面查看,用于排查运行错误
  • Gmail账号若开启两步验证,需使用应用专用密码替代原密码,避免登录失败
  • 建议添加日志记录功能,将运行状态、错误信息写入文件,方便后续排查

内容的提问来源于stack exchange,提问作者Ali Asadullah Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:30:40