没有合适的资源?快使用搜索试试~ 我知道了~
python实现多线程行情抓取工具的方法
3 下载量 142 浏览量
2020-12-23
22:05:18
上传
评论 1
收藏 100KB PDF 举报
温馨提示
试读
5页
思路 借助python当中threading模块与Queue模块组合可以方便的实现基于生产者-消费者模型的多线程模型。Jimmy大神的tushare一直是广大python数据分析以及业余量化爱好者喜爱的免费、开源的python财经数据接口包。 平时一直有在用阿里云服务器通过tushare的接口自动落地相关财经数据,但日复权行情数据以往在串行下载的过程当中,速度比较慢,有时遇到网络原因还需要重下。每只股票的行情下载过程中都需要完成下载、落地2个步骤,一个可能需要网络开销、一个需要数据库mysql的存取开销。2者原本就可以独立并行执行,是个典型的“生产者-消费者”模型。 基于queue与thre
资源详情
资源评论
资源推荐
python实现多线程行情抓取工具的方法实现多线程行情抓取工具的方法
思路思路
借助python当中threading模块与Queue模块组合可以方便的实现基于生产者-消费者模型的多线程模型。Jimmy大神的tushare
一直是广大python数据分析以及业余量化爱好者喜爱的免费、开源的python财经数据接口包。
平时一直有在用阿里云服务器通过tushare的接口自动落地相关财经数据,但日复权行情数据以往在串行下载的过程当中,速
度比较慢,有时遇到网络原因还需要重下。每只股票的行情下载过程中都需要完成下载、落地2个步骤,一个可能需要网络开
销、一个需要数据库mysql的存取开销。2者原本就可以独立并行执行,是个典型的“生产者-消费者”模型。
基于queue与threading模块的线程使用一般采用以下的套路:
producerQueue=Queue()
consumerQueue=Queue()
lock = threading.Lock()
class producerThead(threading.Thread):
def __init__(self, producerQueue,consumerQueue):
self.producerQueue=producerQueue
self.consumerQueue=consumerQueue
def run(self):
while not self.thread_stop:
try:
#接收任务,如果连续20秒没有新的任务,线程退出,否则会一直执行
item=self.producerQueue.get(block=True, timeout=20)
#阻塞调用进程直到有数据可用。如果timeout是个正整数,
#阻塞调用进程最多timeout秒,
#如果一直无数据可用,抛出Empty异常(带超时的阻塞调用)
except Queue.Empty:
print("Nothing to do!thread exit!")
self.thread_stop=True
break
#实现生产者逻辑,生成消费者需要处理的内容 consumerQueue.put(someItem)
#还可以边处理,边生成新的生产任务
doSomethingAboutProducing()
self.producerQueue.task_done()
def stop(self):
self.thread_stop = True
class consumerThead(threading.Thread):
def __init__(self,lock, consumerQueue):
self.consumerQueue=consumerQueue
def run(self):
while true:
try:
#接收任务,如果连续20秒没有新的任务,线程退出,否则会一直执行
item=self.consumerQueue.get(block=True, timeout=20)
#阻塞调用进程直到有数据可用。如果timeout是个正整数,
#阻塞调用进程最多timeout秒,
#如果一直无数据可用,抛出Empty异常(带超时的阻塞调用)
except Queue.Empty:
print("Nothing to do!thread exit!")
self.thread_stop=True
break
doSomethingAboutConsuming(lock)# 处理消费者逻辑,必要时使用线程锁 ,如文件操作等
self.consumerQueue.task_done()
#定义主线程
def main():
for i in range(n):#定义n个i消费者线程
t = ThreadRead(producerQueue, consumerQueue)
t.setDaemon(True)
t.start()
producerTasks=[] #定义初始化生产者任务队列
producerQueue.put(producerTasks)
for i in range(n):#定义n个生产者钱程
t = ThreadWrite(consumerQueue, lock)
t.setDaemon(True)
t.start()
weixin_38513794
- 粉丝: 1
- 资源: 947
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python实现2048小游戏源码
- 基于spark的心脏病信息大数据分析源代码+数据(高分期末大作业).zip
- 基于spark的心脏病信息大数据分析源代码+数据(高分毕业设计).zip
- 《大数据原理》LSH算法实现
- 基于 Canvas 开发的 2d JavaScript框架库, 它可以轻松的实现桌面应用和移动应用中的图形交互交互效果
- 285699177712363PDF电子版.zip
- 基于JavaScript的批量图片裁剪插件
- 基于YOLOv8的蔬菜识别源代码+项目说明+数据集(高分项目).zip
- 基于风控模型的银行客户信用风险评估系统源码+pdf说明+数据集(高分项目).zip
- cn-excelserver2023-x64.exe
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0