新闻中心

新闻中心

当前位置:新闻中心 > 金融文章

并发管理概述和多线程初探(1)

日期:2019-07-17 发布者:admin 来源:5号quant 访问量:393

多线程编程(python版)-前言:一篇文章教会你快速进行多线程编程

欢迎大家关注公众号5号quant。

 

(文章提纲挈领,参考视频认真学习)

(文章是要点点播,看分享视频,成为顶尖quant!)

当你学会面向对象和多线程编程,你才真的掌握了编程。

可以说,面向对象编程和多线程编程是一个IT行业工程师的基本技能。对于这两者理解的深刻程度也决定了编程的内功。对于量化工程师来说,使用多线程编程是实战中不可避开的基本操作,而对于量化研究员来说,这可以让一名量化研究员迅速的掌握框架,产生新想法。更重要的是,作为工具,可以极大地提升策略开发效率。

1.认识程序的执行顺序

多线程编程也叫并发式编程。计算机在执行程序时有一个顺序,而执行这个顺序需要有一个入口起点,C++中main函数就是计算执行的入口,python这种脚本语言的入口就是py文件的开始,如果有main标记,那么入口就从标记开始。

这是正常的顺序执行,但是经常我们面临的任务需要同时处理。比如在量化交易系统中,我们需要一边读取数据、一边进行交易,这时候就需要进行多进程(线程)编程。或者,在更多的情况下,是为了进行批量统计、写入时候提高效率。并发编程也就是多线程编程,就是处理多个任务同时发生时的编程方式。这种情况下,从程序入口顺序执行的编程思路就会限制我们的业务处理能力。

2.认识并发的基本概念,进程、线程和协程。

并发式编程的基本概念包括,进程、线程、协程。三者之间是包含关系。

进程>线程>协程。

三个概念都是衡量任务的单位,只是单位大小不同。

进程是最大的任务单位,每一个进程下面还有进程,进程下面还有协程。

打开我们的计算机任务管理器。

每一个任务都是一个进程,完成程序的某种任务。

但是像微信下面,还有很多子任务,叫做线程。例如,微信需要有一个任务监听网络来信,有一个任务需要发送账号消息,还有一个任务需要处理微信正在打开的网页。总之,多个任务并行,相互之间没有冲突。这就是典型的多线程编程应用场景。

欢迎大家关注公众号5号quant。


3创建线程的三种方式

python中涉及线程主要有两个模块thread模块和threading模块。

但是threading模块功能更强大,是现在主要使用的模块。

3.1 _threading模块

_threading模块是python3中的模块,对等于python2中的thread,但是由于功能有限,建议多使用threading模块。但是这里也简单介绍下如何使用thread进行并发编程。

 

一个简单的_thread.start_new_thread(函数名,(参数1,参数2)),这样就开始了两个任务同时进行。程序在执行循环的同时,也执行了doSth,具体的顺序由电脑的时间切片决定。

这里强调一个概念,主线程是指从main开始顺序执行的任务。

这里创建的线程是一个守护线程。守护线程,顾名思义,主线程结束的时候,守护线程随之结束。

虽然线程之间都是独立处理任务,但是其余线程的生命周期受限制于主线程。

3.2threading.Thread模块

_thread的多线程编程方式是函数式编程。threading.Thread的编程方式是面向对象的编程。

首先将Thread类实例化,实例化过程中传入要完成的任务(对应任务是函数指针)和对应参数,参数要以元组的形式传入。实例化之后,调用start方法,就启动了新线程。这种方式启动的线程是非守护线程,可以使用对象方法setDaemon(True)设置为守护线程。

3.3继承threading.Thread模块

上面两种方式是简单直接的方式,这种继承的方式本质上是一样的,不过继承之后,线程可以自由定制。

这里重写过程中有两处需要注意:

一个是初始化函数中使用super方式初始化;

一个是run函数中重写为要完成的任务。

集成Tread后,有了新的线程类,因此启动新线程的步骤仍然是先实例化,再start()方法。

继承过程中需要注意,自己新增的属性是否覆盖了原始属性。可以采用追踪的方式查看。



    我要评论
    评论内容:

    上一篇: 交易的本质

    下一篇: 投资风向标--飞碟财经|跟单社区|外汇指标|免费EA