簡體   English   中英

每天運行一次 Flask python 代碼的一部分

[英]Run part of a Flask python code once a day

我終於設法通過使用 ftp 下載信息來創建一個 postgres 表。

該數據庫存儲超過 11,000 個股票代碼和其他數據,每次調用 function 時都需要花費時間來構建。

function 是否有可能每天早上在特定時間運行,數據庫將被更新?

此外,在 Flask 應用程序結構中寫入此 function 的最佳位置是什么?

function 是:

def symbol_search():
    flo = BytesIO()

    directory = 'symboldirectory'
    filenames = ('otherlisted.txt', 'nasdaqlisted.txt')

    ftp = FTP('ftp.nasdaqtrader.com')
    ftp.login()
    ftp.cwd(directory)

    #Create pandas dataframes of stock symbols from the nasdaqlisted and otherlisted files.
    for item in filenames:
        nasdaq_exchange_info=[]
        ftp.retrbinary('RETR ' + item, flo.write)
        flo.seek(0)
        nasdaq_exchange_info.append(pd.read_fwf(flo))
    ftp.quit()

    nasdaq_exchange_info=pd.concat(nasdaq_exchange_info, axis=1)
    nasdaq_exchange_info[['symbol', 'name', 'Exchange', 'Symbol', 'etf', 'Lot_size', 'Test', 'NASDAQ_Symbol']]=nasdaq_exchange_info['ACT Symbol|Security Name|Exchange|CQS Symbol|ETF|Round Lot Size|Test Issue|NASDAQ Symbol'].str.split('|', expand=True)
    nasdaq_exchange_info=nasdaq_exchange_info.drop(nasdaq_exchange_info.columns[[0]], axis=1).dropna()
    nasdaq_exchange_info=nasdaq_exchange_info[nasdaq_exchange_info.Test != 'Y']
    nasdaq_exchange_info=nasdaq_exchange_info[nasdaq_exchange_info.symbol != 'Y']
    nasdaq_exchange_info=nasdaq_exchange_info[~nasdaq_exchange_info.symbol.str.contains('symbol')]
    nasdaq_exchange_info=nasdaq_exchange_info[~nasdaq_exchange_info.symbol.str.contains('File')]
    nasdaq_exchange_info=nasdaq_exchange_info[~nasdaq_exchange_info.name.str.contains('%')]
    nasdaq_exchange_info=nasdaq_exchange_info[~nasdaq_exchange_info.name.str.contains('arrant')]
    nasdaq_exchange_info=nasdaq_exchange_info.drop(['Symbol', 'Exchange', 'Lot_size', 'Test', 'NASDAQ_Symbol', 'etf'], axis = 1)
    nasdaq_exchange_info=nasdaq_exchange_info[['name', 'symbol']].values.tolist()
    return nasdaq_exchange_info

您可以使用APScheduler庫。

from apscheduler.schedulers.blocking import BlockingScheduler
#...
scheduler = BackgroundScheduler(timezone="Europe/Rome")
# Runs from Monday to Friday at 5:30 (am)
scheduler.add_job(
    func=search,
    trigger="cron",
    max_instances=1,
    day_of_week='mon-fri',
    hour=5,
    minute=30
)
scheduler.start()

查看此鏈接以更好地了解如何設置觸發器以調用 function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM