使用python yfinance多线程下载Yahoo股票历史记录

wa

我正在尝试下载行情清单的历史数据并将每个行情清单导出到csv文件。我可以将它作为for循环来使用,但是当股票行情自动收录器的列表在1000时非常慢。我正在尝试对进程进行多线程处理,但是我不断收到许多不同的错误。有时它将仅下载1个文件,而其他时间则是2或3,甚至是6,但不会超过此次数。我猜测这与6核12线程处理器有关,但我真的不知道。

import csv
import os
import yfinance as yf
import pandas as pd
from threading import Thread

ticker_list = []

with open('tickers.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    name = None
    for row in reader:
        if row[0]:
            ticker_list.append(row[0])

start_date = '2019-03-03'
end_date = '2020-03-04'

data = pd.DataFrame()

def y_hist(i):
    ticker = ticker_list[i]
    data = yf.download(ticker, start=start_date, end=end_date, group_by="ticker")
    data.to_csv('yhist/' + ticker + '.csv', sep=',', encoding='utf-8')

threads = []

for i in range(os.cpu_count()):
    print('registering thread %d' % i)
    threads.append(Thread(target=y_hist,args=(i,)))

for thread in threads:
    thread.start()

for thread in threads:
    thread.join()

print('done')

这是带有代码的csv的示例文件,足以测试此文件。ticker.csv

这些页面是我阅读并使用过的页面,以实现这一目的:

多线程报废雅虎财务

工程师人线程

Python异步编程简介

这是其输出的简化版本,可能有助于澄清问题。

import os
import pandas as pd
import yfinance as yf
from threading import Thread

ticker_list = ['IBM','MSFT','QQQ','SPY','FB','XLV','XLF','XLK','XLE','GTHX','IYR','ONE','ROG','OLED','GLD']

def y_hist():
    for ticker in ticker_list:
        print(ticker)

threads = []

for i in range(os.cpu_count()):
    threads.append(Thread(target=y_hist))

for thread in threads:
    thread.start()

for thread in threads:
    thread.join()

输出:

IBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
GLD
IBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
GLD
IBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
IBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
GLD
OLEDIBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
GLD
IBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
IBM
GLD
MSFT
ROG
OLED
GLD

QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
GLD
IBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
GLD
IBM
MSFT
QQQ
SPY
IBM
MSFT
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
GLD
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
GLD
IBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
IBM
MSFT
QQQ
SPY
FB
XLV
XLF
XLK
XLE
GTHX
IYR
ONE
ROG
OLED
GLD
GLD
wa

虽然这不能直接解决我的损坏代码,但它是一种可以得到相同结果的解决方案。它使用内置的yfinance多线程功能。不幸的是,我仍然不知道为什么原始代码无法正常工作,并且仍然会感谢您提供反馈。同时,如果任何人都在寻找相同问题的解决方案,这将起作用。

import csv
import os
import yfinance as yf
import pandas as pd
import time
start = time.time()

ticker_list = []

with open('tickers.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    name = None
    for row in reader:
        if row[0]:
            ticker_list.append(row[0])

data = yf.download(
        tickers = ticker_list,
        period = '1y',
        interval = '1d',
        group_by = 'ticker',
        auto_adjust = False,
        prepost = False,
        threads = True,
        proxy = None
    )

data = data.T

for ticker in ticker_list:
    data.loc[(ticker,),].T.to_csv('yhist/' + ticker + '.csv', sep=',', encoding='utf-8')

print('It took', time.time()-start, 'seconds.')

是时候列出400条报价器了:

将线程设置为True

[********************* 100%***********************] 400 of已完成400

花了23.420897006988525秒。

将线程设置为False

[********************* 100%***********************] 400 of已完成400

花了133.77732181549072秒。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用python 3.5从Yahoo Finance下载股票价格历史记录

来自分类Dev

Python删除Firefox历史记录

来自分类Dev

使用matplotlib绘制历史记录

来自分类Dev

安全的bash历史记录使用

来自分类Dev

在Windows中使用python获取重启历史记录

来自分类Dev

如何使用bash历史记录使用历史记录中的参数运行命令?

来自分类Dev

Python熊猫Google为国际股票提供金融服务-寻找通过Google获取国际股票价格历史记录的方法

来自分类Dev

Python熊猫Google为国际股票提供金融服务-寻找通过Google获取国际股票价格历史记录的方法

来自分类Dev

如何使用历史记录类处理浏览器历史记录

来自分类Dev

如何使用 CLI 导出 Appengine 使用历史记录

来自分类Dev

如何禁用python历史记录保存?

来自分类Dev

python 3.4 Google Chrome历史记录

来自分类Dev

如何使用Java清除后退按钮历史记录?

来自分类Dev

使用JS代码清除Chrome标签历史记录

来自分类Dev

如何使用JavaScript清除浏览历史记录?

来自分类Dev

从git历史记录中删除未使用的资产

来自分类Dev

使用Mongodb oplog跟踪数据更改历史记录

来自分类Dev

Android移动使用历史记录NetworkStatsManager

来自分类Dev

使用Git强制文件历史记录关联

来自分类Dev

正确使用readline以显示历史记录

来自分类Dev

使用当前的.gitignore使Git重建历史记录

来自分类Dev

使sudoers使用自己的历史记录文件

来自分类Dev

深入了解Android数据使用历史记录

来自分类Dev

SQLite使用lag()函数打印出历史记录

来自分类Dev

使用“允许无关历史记录”并合并

来自分类Dev

使用rebase重写Git历史记录

来自分类Dev

在Bash别名中使用历史记录命令

来自分类Dev

使sudoers使用自己的历史记录文件

来自分类Dev

使用JPA进行历史记录跟踪

Related 相关文章

  1. 1

    使用python 3.5从Yahoo Finance下载股票价格历史记录

  2. 2

    Python删除Firefox历史记录

  3. 3

    使用matplotlib绘制历史记录

  4. 4

    安全的bash历史记录使用

  5. 5

    在Windows中使用python获取重启历史记录

  6. 6

    如何使用bash历史记录使用历史记录中的参数运行命令?

  7. 7

    Python熊猫Google为国际股票提供金融服务-寻找通过Google获取国际股票价格历史记录的方法

  8. 8

    Python熊猫Google为国际股票提供金融服务-寻找通过Google获取国际股票价格历史记录的方法

  9. 9

    如何使用历史记录类处理浏览器历史记录

  10. 10

    如何使用 CLI 导出 Appengine 使用历史记录

  11. 11

    如何禁用python历史记录保存?

  12. 12

    python 3.4 Google Chrome历史记录

  13. 13

    如何使用Java清除后退按钮历史记录?

  14. 14

    使用JS代码清除Chrome标签历史记录

  15. 15

    如何使用JavaScript清除浏览历史记录?

  16. 16

    从git历史记录中删除未使用的资产

  17. 17

    使用Mongodb oplog跟踪数据更改历史记录

  18. 18

    Android移动使用历史记录NetworkStatsManager

  19. 19

    使用Git强制文件历史记录关联

  20. 20

    正确使用readline以显示历史记录

  21. 21

    使用当前的.gitignore使Git重建历史记录

  22. 22

    使sudoers使用自己的历史记录文件

  23. 23

    深入了解Android数据使用历史记录

  24. 24

    SQLite使用lag()函数打印出历史记录

  25. 25

    使用“允许无关历史记录”并合并

  26. 26

    使用rebase重写Git历史记录

  27. 27

    在Bash别名中使用历史记录命令

  28. 28

    使sudoers使用自己的历史记录文件

  29. 29

    使用JPA进行历史记录跟踪

热门标签

归档