python-多线程编程

串行程序必须使用非阻塞I/O,或拥有计时器的阻塞I/O,需兼顾要执行的多个任务,难以维护。

多线程编程,以及多线程队列数据结构,包含如下几个执行特定函数的线程:

UserRequestThread:读取客户端输入,放入队列

RequestProcessor:从队列中获取请求并处理

ReplyThread:结果回传用户 or 把数据写入本地数据库

1 线程和进程

1.1 进程:一个运行中的程序

1.2 线程:在同一进程下执行,共享上下文,共享同一片数据空间。当线程运行时,可以被中断和临时挂起

2 线程和python

2.1 全局解释器锁(GIL)

python解释器可以运行多个线程,但任意时刻,只有一个线程会被解释器执行。
(1-设置GIL,2-切换1个线程执行,3-(执行数量的字节码指令 Or 线程让出控制权 time.sleep(0),4-设置线程为睡眠状态,5-解锁GIL))

2.2 退出线程

当一个线程完成函数执行,会退出。也可以通过调用thread.exit()退出函数、sys.exit()退出Python进程、抛出SystemExit异常来使线程退出。

2.3 在python中使用线程

避免使用thread模块,因为对于进程何时退出没有控制。当主线程结束时,所有其他线程也都强制结束。

2.4 thread模块

thread模块提供了基本的同步数据结构---锁对象,核心函数 start_new_thread(func,args),派生新的线程来调用这个函数。此外还有 allocate_lock()---分配锁对象   exit()---退出线程
"start_new_thread() 必须包含开始的2个参数,即使函数func不需参数,也要传递空元祖进去"

"引入锁,目的为了在所有线程结束后立刻退出"

锁对象方法:
1 acquire() 获取
2 locked() 如果获取了 返回True
3 release() 释放


2.5 threading模块

threading模块包含的对象
threading模块支持守护线程,一般是一个等待客户端请求服务的服务器,如果主线程准备退出,不需要等待某个子线程完成,可以给这个子线程设置守护线程标记,需要在启动线程之前赋值语句,thread.daemon = True,一个新的子线程会继承父线程的守护标记。

2.5.1 Thread类

Thread对象属性

name---线程名
ident 线程标识符
daemon--是否是守护线程

Thread对象方法

__init__(group=None, target=None, args())
start()
run()---定义线程功能的方法
join(timeout=None)---直至启动的线程终止之前一直挂起,除非有timeout,否则一直阻塞。

使用Thread类,创建线程的方法:

1 创建Thread实例,传给它一个函数。
   实例化Thread和调用thread.start_new_thread()最大的区别是,新线程不会立即开始执行。通过调用每个线程的start()方法开始执行,join()方法等待线程结束。

2 派生Thread的子类,并创建子类的实例。

class MyThread(threading.Thread):
      def __init__(self, func, args, name=' '):   
            threading.Thread.__init__(self)    #调用父类构造函数初始化父类

为了让子类更加通用,专门配置一个模块,便于以后导入。把结果保存在实例属性中,并新建一个方法来获取值。


2.6 单线程和多线程执行对比

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 多线程编程 进程(process)和线程(thread) Linux 和 windows 是多任务操作系统, 这就...
    江洋林澜阅读 618评论 0 0
  • 1、线程和进程 计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。 假定工厂的电力有限,一...
    Andone1cc阅读 494评论 0 1
  • 1、线程和进程 计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。 假定工厂的电力有限,一...
    文哥的学习日记阅读 14,352评论 0 9
  • 来源:数据分析网Threading 模块从 Python 1.5.2 版开始出现,用于增强底层的多线程模块 thr...
    PyChina阅读 1,738评论 0 5
  • 俗话说浓缩的都是精华,很多公司销售的产品种类包含了很多,男装,女装,童装,家居等都有,现在很多公司都缩减了品类,单...
    423429d90f38阅读 202评论 0 0