使用stock_basic从tushare获取股票数据,从中提取股票代码,用此股票代码下载股票交易数据,打印总股票数量,下载花费时间,发送信号股票的下载进度,使用两个线程来下载
时间: 2023-10-12 09:04:35 浏览: 205
首先,我们需要安装tushare库并获取API token。然后使用以下代码来获取股票代码列表:
```python
import tushare as ts
# 设置token
ts.set_token('your_token_here')
# 初始化pro接口
pro = ts.pro_api()
# 获取股票代码列表
df = pro.stock_basic(list_status='L', fields='ts_code')
# 提取股票代码
stock_codes = df['ts_code'].tolist()
```
接下来,我们可以使用多线程来下载股票交易数据。以下是一个简单的示例代码,其中包含两个线程:
```python
import threading
import time
import datetime
import tushare as ts
# 设置token
ts.set_token('your_token_here')
# 初始化pro接口
pro = ts.pro_api()
# 获取股票代码列表
df = pro.stock_basic(list_status='L', fields='ts_code')
stock_codes = df['ts_code'].tolist()
# 定义下载函数
def download_stock_data(start, end, progress_callback):
for i in range(start, end):
stock_code = stock_codes[i]
df = pro.daily(ts_code=stock_code, start_date='20100101', end_date='20201231')
# 处理数据...
# 发送下载进度信号
progress_callback(i+1)
# 定义进度回调函数
def progress_callback(progress):
print(f"{progress} / {len(stock_codes)} stocks downloaded.")
# 开始下载
start_time = time.time()
thread1 = threading.Thread(target=download_stock_data, args=(0, len(stock_codes)//2, progress_callback))
thread2 = threading.Thread(target=download_stock_data, args=(len(stock_codes)//2, len(stock_codes), progress_callback))
thread1.start()
thread2.start()
thread1.join()
thread2.join()
end_time = time.time()
# 输出下载时间
total_time = datetime.timedelta(seconds=end_time - start_time)
print(f"{len(stock_codes)} stocks downloaded in {total_time}.")
```
在上述代码中,我们使用了`threading`库来创建两个线程同时下载股票数据。我们还定义了一个进度回调函数,以便在下载进程中发送信号。最后,我们输出了下载总时间。
需要注意的是,tushare API每分钟只允许请求200次,因此,在实际应用中,我们需要控制下载速度以避免触发频率限制。
阅读全文