python分别使用多线程和多进程获取所有股票实时数据

python分别使用多线程和多进程获取所有股票实时数据

前一天简单介绍了python怎样获取历史数据和实时分笔数据,那么如果要获取所有上市公司的实时分笔数据,应该怎么做呢? 
肯定有人想的是,用一个列表存储所有上市公司的股票代号,然后无限循环获取不就得了吗? 
现在深市和沪市的股票一共有3400多只,如果你真这样做的话,获取一次所有股票的实时数据需要十几二十秒的时间,甚至更多,而且非常容易因为等待超时而使程序挂掉,如果你的模型对实时数据的质量要求非常高,这肯定是不行的,即使不考虑数据质量,获取数据的脚本经常挂也是不行的。 
那首先想到的是多线程和多进程。然而因为python全局解释锁的存在,在多线程情况下,即使是在多核cpu的情况下,也只能同时执行一个线程,即使如此,多线程获取一次所有股票实时数据所花的时间,依然比在一个大循环里面运用单线程少得多,这是因为python从网络获取数据存储到本地,是IO密集型任务,python多线程依然能很大程度上提高性能,具体细节在这里不多做介绍。 
为了充分利用带宽资源,IO资源,在这里使用多线程和多进程两种方式获取股票数据, 
首先我们需要有一个比较全的所有股票代号文件,我已经替大家准备好了,关注微信公众号【数据之佳】回复“股票”四个字即可得到下载链接,压缩包提供多线程和多进程获取股票实时数据两个案例,其中的stocks文件内存储的是股票代号文件,提供的是截止今日(2017-11-23)的所有上市公司代号。

 
在这里提供多线程的例子,多进程的例子请在【数据之佳】里面查看,同时代码也给大家准备好了,上面回复的“股票”得到的下载链接里面直接就有python源文件,下载以后修改一下路径直接就可以跑了,其中用到的python版本是昨天分享的文章中anaconda自带的python3.5,代码依然使用jupyter编写,操作系统为win10,在linux上只需要稍加改动就可以了执行了。

import pandas as pd
import numpy as np
import tushare as ts
import os
import time
from threading import Thread
def get_data(stock):
    date=time.strftime(‘%Y-%m-%d-%H-%M-%S‘,time.localtime(time.time()))
    data=ts.get_realtime_quotes(stock)
    print(data)
    path=‘F:\\stocks‘
    data.to_csv(path+‘\\‘+date+‘_‘+stock,mode=‘wt‘)
time1=time.strftime(‘%Y-%m-%d-%H-%M-%S‘)
print(time1)
with open(‘F:\stocks\stock_codes\stocks‘) as f:
                try:
                        while True:
                                line=next(f).strip()
                                t=Thread(target=get_data,args=(line,))
                                t.start()
                except StopIteration:
                    pass
time2=time.strftime(‘%Y-%m-%d-%H-%M-%S‘)
print(time2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

其中time1是获取一次所有股票的开始时间,time2是结束时间,具体有耗时多上时间,请读者下载元代以后自行测试

2017-11-23-21-16-23 
2017-11-23-21-16-33

这是我注释了prinf(data)一行以后所花的时间,恰好用了10秒,如果你的网络好一些,可能会更快,当然这不是最快的方法,最快的方法可以实现一秒以内获取一次。 
 
数据已经存储在指定目录下,使用多进程的例子请各位自行获取下载链接下载。 
下面是【数据之佳】的二维码,我会在公众号分享一些量化建模的案例,结果等。

原文地址:https://www.cnblogs.com/timdes1/p/8231479.html

时间: 2024-11-10 07:39:52

python分别使用多线程和多进程获取所有股票实时数据的相关文章

Python 2.7_多进程获取简书专题数据(一)

学python几个月了正好练练手,发现问题不断提高,先从专题入手,爬取些数据,一开始对简书网站结构不熟悉,抓取推荐,热门,城市3个导航栏,交流发现推荐和热门是排序不同,url会重复,以及每个专题详情页三个类目最新评论,最新收录, 热门也会重复 做了下调整,代码执行完毕会返回所有专题的urls元组对象,以便下一步进入每个专题页面解析获取其他数据.注:变量focus关注数,和打开专题后最上面显示的专题关注人数会有差异,例如有的专题关注了10175人,在专题列表页会显示成"10.07k",因

Python系列之多线程、多进程

一.python多线程 线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程. Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装.绝大多数情况下,我们只需要使用threading这个高级模块. import threading import time def f1(num)

快速获取最新股票相关数据,并使用数据分析进行数据清洗,获取有效信息

关键性python数据包的安装 pip3 install tushare import tushare as ts股票代码为code参数,start为收集该股票数据的开始日期df = ts.get_k_data(code='600519', start='2000-01-01')接下来的步骤由各人所需决定,详情可以看上一篇关于pandas中数据的操作.小案列如下:假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何? import

python中的多线程和多进程编程

注意:多线程和多线程编程是不同的!!! 第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程:而多进程的话就是一个进程同时在多个核上进行: 第二点:多线程是一种并发操作(伪并行),它相当于把CPU的时间片分成一段一段很小的片段,然后分给各个线程交替进行,由于每个片段都很短,所以看上去像平行操作: (1)多线程操作案例: import threading class MyThread(threading.Thread): def __init__(self ,

python下的多线程与多进程

多进程: 进程我们可以理解为是一个可以独立运行的程序单位,比如打开一个浏览器,这就开启了一个浏览器进程:打开一个文本编辑器,这就开启了一个文本编辑器进程.但一个进程中是可以同时处理很多事情的,比如在浏览器中,我们可以在多个选项卡中打开多个页面,有的页面在播放音乐,有的页面在播放视频,有的网页在播放动画,它们可以同时运行,互不干扰.为什么能同时做到同时运行这么多的任务呢?这里就需要引出线程的概念了,其实这一个个任务,实际上就对应着一个个线程的执行. 而进程呢?它就是线程的集合,进程就是由一个或多个

通过Jquery异步获取股票实时数据

最近朋友让我帮他做个异步获取数据的程序,暂时服务器什么都没有,所以我就想先拿股票数据打个框架,方便后续开发和移植等事情 代码如下: <!-- 说明:股票看盘 作者:黑桃A 时间:2014-04-14 参考: http://www.lxway.com/240649562.htm http://www.lxway.com/946486042.htm http://www.365mini.com/page/jquery_getscript.htm http://blog.csdn.net/xxjoy_

使用tushare获取股票实时分笔数据延时有多大

使用tushare获取股票实时分笔数据延时有多大 前几天分享了一段获取所有股票实时数据的代码,有用户积极留言,提出一个非常棒的问题:如果数据本生的延时非常严重,通过代码获取数据再快又有什么用呢? 一直以来我也只是直观感觉延时并不是很长,但没有做过详细的统计,今天统计一下通过上一篇文章分享的方法获取的实时数据,究竟延时有多大. 今天实验用的数据是今天(2017-12-12)使用服务器脚本获取的实时数据的一部分,一共筛选了268只股票,数据只是这一天中的一部分数据,由于开盘了以后才修改的脚本,数据大

Python多线程,多进程,并行,并发,异步编程

Python并发与并行的新手指南:http://python.jobbole.com/81260/ Python 中的多线程,多进程,并发,并行,同步,通信:https://blog.csdn.net/timemachine119/article/details/54091323 python进阶笔记 thread 和 threading模块学习:https://www.cnblogs.com/forward-wang/p/5970640.html Python 中的多线程,多进程,并发,并行,

单线程、多线程、多进程、协程比较,以爬取新浪军事历史为例

演示python单线程.多线程.多进程.协程 1 import requests,json,random 2 import re,threading,time 3 from lxml import etree 4 5 lock=threading.Lock() 6 semaphore=threading.Semaphore(100) ###每次限制只能100线程 7 8 user_agent_list = [ 9 "Mozilla/5.0 (Windows NT 6.1; WOW64) Appl