0

我正在尝试使用 yahoo Finance 将 1700 个(公司)股票市场数据集下载到 csv 文件中,并且它成功地存储了它们,我使用了 while 循环,我运行,while 循环直到 1700 次,几乎花了 2 多小时,我可以在python中使用并行编程来节省时间吗?

import pandas_datareader as web
import pandas as pd
import csv
import datetime

count=0;
while count<1700:
    df = web.DataReader("TCS.NS", 'yahoo', start,end)
    file = open('csv_file.csv')
    reader= csv.reader(file)
    df.to_csv('csv_file.csv')
    df = pd.read_csv('csv_file.csv')
    .
    .
    .
    count +=1

我还对数据执行了一些不同的操作,并在 while 循环中将其存储在 MySQL 数据库中。请帮我解决这个问题

4

3 回答 3

1

您可以使用线程:

from threading import Thread

def process_data(count):
    df = web.DataReader("TCS.NS", 'yahoo', start,end)
    file = open('csv_file.csv')
    reader= csv.reader(file)
    df.to_csv('csv_file.csv')
    df = pd.read_csv('csv_file.csv')
    ...

for count in range(1700):
    Thread(target=process_data, args=(count,)).start()
于 2020-06-13T17:46:45.873 回答
-1

你可以这样做multithreaded programming来实现这个功能。基本思想是创建多个线程,每个线程下载整个数据集的一个子集。例如,您可以创建 17 个线程,每个线程将下载 100 个数据集。

这是一篇关于python中多线程的好文章

于 2020-06-13T17:47:14.647 回答
-1

有多种方法可以实现这一点,但为了避免全局解释器锁 (GIL),您需要确保使用multi-processing或类似async I/O的东西。

在 Python 中,多线程仍然一次只允许一个线程执行。使用多处理,您实际上可以并行生成多个进程。我会推荐像多处理池这样的东西,它很容易上手。

同样为了安全起见,我会将写入移动到生成文件检索的循环之外的数据库。在提取数据时,您可能希望避免多次并发写入数据库,除非您知道如何安全地执行此操作。

于 2020-06-13T17:53:22.210 回答