如何为股票处理脚本添加多线程/多进程以提升运行效率?
给股票处理脚本提速的多任务方案
兄弟,单线程处理所有股票耗35秒确实有点慢,用并行/并发处理绝对能帮你把时间打下来!Python里有几个实用的库,我给你唠唠具体怎么用:
1. 多线程:concurrent.futures.ThreadPoolExecutor(最适合你的场景)
你的脚本里大部分是API请求、读写文件这类IO密集型任务,多线程刚好能发挥优势——线程切换开销小,能同时发起多个网络请求,不用等一个请求完了再处理下一个。
给你改个代码片段参考:
from concurrent.futures import ThreadPoolExecutor import schedule import time # 保留你原来的其他导入 # 把单只股票的处理逻辑抽成单独函数 def process_one_stock(stock_code): # 这里初始化Kite连接(注意:如果Kite的连接对象不能跨线程,就在这里每次初始化) kite = KiteConnect(api_key='YOUR_API') kite.set_access_token('YOUR_ACCESSTOKEN') # 写单只股票的处理逻辑:比如拉历史数据、计算指标、存CSV/JSON stock_data = kite.historical_data(stock_code, "2024-01-01", "2024-05-20", "day") # 后续的数据分析、文件写入操作都放这里 def job(): # 假设你有个要处理的股票列表 my_stocks = ["RELIANCE", "TCS", "INFY", "HDFCBANK"] # 换成你的股票池 # 开线程池,max_workers根据API限流设置,比如设5-10都可以 with ThreadPoolExecutor(max_workers=8) as executor: executor.map(process_one_stock, my_stocks) # 原来的调度逻辑不变 schedule.every().day.at("09:15").do(job) while True: schedule.run_pending() time.sleep(1)
提醒下:别把线程数开太大,要是API有请求频率限制,容易被限流封号,先测着来~
2. 多进程:concurrent.futures.ProcessPoolExecutor(适合CPU密集场景)
如果你的脚本里有大量复杂计算(比如自定义的技术指标、机器学习模型预测),多进程能绕过Python的GIL锁,把多核CPU的性能用起来。用法和线程池差不多:
from concurrent.futures import ProcessPoolExecutor def process_one_stock(stock_code): # 单只股票处理逻辑,和上面一致 pass def job(): my_stocks = ["RELIANCE", "TCS", "INFY"] # max_workers一般设成你电脑的CPU核心数,比如4核就设4 with ProcessPoolExecutor(max_workers=4) as executor: executor.map(process_one_stock, my_stocks)
注意:多进程的内存开销比线程大,要是只是IO操作,线程池足够了
3. 额外优化小技巧
- 批量请求优先:如果KiteConnect支持批量获取多只股票数据,直接用批量接口,比单只请求快N倍
- 缓存重复数据:比如某些基础数据每天都用,存到本地缓存里,不用每次都请求API
- 砍掉冗余操作:你脚本里导入了
matplotlib.pyplot,要是后台处理不用画图,直接删掉,能省点加载时间
内容的提问来源于stack exchange,提问作者Kiran Kumar Reddy
相关产品推荐
相关产品推荐

