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秒,如果你的网络好一些,可能会更快,当然这不是最快的方法,最快的方法可以实现一秒以内获取一次。 
 
数据已经存储在指定目录下,使用多进程的例子请各位自行获取下载链接下载。 
下面是【数据之佳】的二维码,我会在公众号分享一些量化建模的案例,结果等。

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

  1. 第十章:Python高级编程-多线程、多进程和线程池编程

    第十章:Python高级编程-多线程.多进程和线程池编程 Python3高级核心技术97讲 笔记 目录 第十章:Python高级编程-多线程.多进程和线程池编程 10.1 Python中的GIL 10 ...

  2. python爬虫之多线程、多进程+代码示例

    python爬虫之多线程.多进程 使用多进程.多线程编写爬虫的代码能有效的提高爬虫爬取目标网站的效率. 一.什么是进程和线程 引用廖雪峰的官方网站关于进程和线程的讲解: 进程:对于操作系统来说,一个任 ...

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

    学python几个月了正好练练手,发现问题不断提高,先从专题入手,爬取些数据,一开始对简书网站结构不熟悉,抓取推荐,热门,城市3个导航栏,交流发现推荐和热门是排序不同,url会重复,以及每个专题详情页 ...

  4. python中的多线程和多进程

    一.简单理解一下线程和进程 一个进程中可有多个线程,线程之间可共享内存,进程间却是相互独立的.打比方就是,进程是火车,线程是火车厢,车厢内人员可以流动(数据共享) 二.python中的多线程和多进程 ...

  5. Python系列之多线程、多进程

    线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程. Python的标准库提供 ...

  6. python之路-----多线程与多进程

    一.进程和线程的概念 1.进程(最小的资源单位): 进程:就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 程序:我们编写的程序用来描述进程要完成哪些功能以 ...

  7. python基础之多线程与多进程(二)

    上课笔记整理: 守护线程的作用,起到监听的作用 一个函数连接数据库 一个做守护线程,监听日志 两个线程同时取一个数据 线程---->线程安全---->线程同时进行操作数据. IO操作--- ...

  8. Python之threading多线程,多进程

    1.threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要,先说一下线程和进程的各种区别,如图 概括起来就是 IO密集型(不用CPU) 多线程计算密集型(用CPU) ...

  9. python 16篇 多线程和多进程

    1.概念 线程.进程 进程 一个程序,它是一组资源的集合 一个进程里面默认是有一个线程的,主线程 多进程是可以利用多核cpu的线程 最小的执行单位 线程和线程之间是互相独立的 主线程等待子线程执行结束 ...

随机推荐

  1. MySQL-快速入门(8)存储过程、存储函数

    1.存储过程 1>创建存储过程:create procedure create procedure sp_name ([in | out | inout] param_name type) [c ...

  2. 为什么你的javascript学了这么久,水平还是烂成了渣?

    今年我给公司面试时,面试了百来个人,水平我就呵呵了,还觉得自己学了很久很厉害了,其实呢,渣的很呀,这篇文章送给想学好javascript找份工作的同学们. 首先要说明的是,咱现在不是高手,最多还是一个 ...

  3. TestCase维护和思维导图

    在软件整个生命周期中,测试应该尽早地开始,因为测试对象不只是程序,还有文档和数据,所以针对需求分析说明书.概要设计和详细设计说明书,测试如何快速理解项目需求,进行下一步的工作呢? 本人觉得,如果只是看 ...

  4. Zookeeper — 应用场景

    大致来说,zookeeper 的使用场景如下,我就举几个简单的,大家能说几个就好了: 分布式协调 分布式锁 元数据/配置信息管理 HA高可用性 分布式协调 这个其实是 zookeeper 很经典的一个 ...

  5. 客户端通过url向后端传递参数

    在前端我们不仅可以通过get请求携带参数的方式向服务端传数据: https://127.0.0.1/index/?id=1&name=alex Django也允许通过,path路径的方式向se ...

  6. ThinkPHP视图css和js加上版本号防止缓存

    前台模块中,我的所有控制器都继承BaseController,虽然ThinkPHP中我们提供了两个配置项 'TMPL_CACHE_ON' => false,// 禁止模板编译缓存 'HTML_C ...

  7. Mysql数据库在建表时指定engine等于InnoDB 或MyISAM的意义

    一.ISAM和InnoDB的定义 1. ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数.因此,ISAM执行读取操作的速度很快 ...

  8. sass和less的对比

    );  <  { ;  {   {     ; } ); } ); } );  // if 条件  @dr: if(@my-option = true, {     button {       ...

  9. python利用(threading,ThreadPoolExecutor.map,ThreadPoolExecutor.submit) 三种多线程方式处理 list数据

    需求:在从银行数据库中取出 几十万数据时,需要对 每行数据进行相关操作,通过pandas的dataframe发现数据处理过慢,于是 对数据进行 分段后 通过 线程进行处理: 如下给出 测试版代码,通过 ...

  10. VB TreeView控件使用详解(有趣的示例)

    第一小时:学习直接用代码将数据填充到树控件中. 为什么要先学习直接用代码将数据填充到树控件中?因为这种方法是最简单的,代码也最容易理解,学习树控件,先将这个学会,已经掌握了一半,所以先不要急着想怎么将 ...