Python2.7 threading模块学习
主要学习一下python的多线程编程,使用threading模块,threading 包括:Thread、conditions、event、rlock、semaphore等类。
Thread对象可以实例化一个线程t,在创建t线程时,可以将t的主函数作为一个参数传递进去(target=),或者创建Thread的子类覆盖run方法。在Thread实例化线程t后,t并没有运行,要想让t线程活动,必须启动t,t.start()即可,一旦t是活动的,t将在其主函数结束时结束。在Thread实例化一个线程时必须指定target。
Thread的方法如下:
getname可以返回线程t的名称,setname设置线程t的名称
isalive 判断一个线程是否是活动的,也就是线程状态在t.start和t.run之间
isdaemon/setdaemon 如果线程t是一个驻留程序(即使t是活动的,python也可以终止整个处理过程,也会将t结束),isdaemon返回ture,仅当创建t的线程是一个驻留程序时,线程t才是一个驻留程序,这样只能在t.start()之前调用t.setdaemon来设置t为一个驻留程序。
join 其他调用线程(非t)会直接挂起,直到t结束,只能在t.start之后调用t.join
run run是运行线程t主函数的方法,thread的子类通常会覆盖run,如果不被覆盖,run将调用在创建t时传递的target参数,通过t.start()调用t.run
start t.start()让线程t活动
线程同步对象:
timeout 在event和condition中都有一个可以接收一个可选的timeout参数作为wait方法
lock/rlock threading的lock和thread的lock一样,rlock是一个重入锁,在r被锁定时,r将跟踪所有者(锁定r的哪个)线程,所有者线程可以再次调用r.acquire而不会出现阻塞,r只是将内部计数器加1。而lock则会永远阻塞。
condition 创建返回一个condition对象c,c可以包装一个lock或者rlock对象L,acquire/release 这些方法将调用L的对应方法,前提是一个线程拥有对L的锁。notify/notifyall notify可以唤醒正在等待c的线程中的某一个线程,调用线程在调用c.notify()之前必须拥有L,并且notify不会释放L。调用线程通常会在调用notify之后调用release。
wait wait将释放L,然后挂起调用线程,直到其他线程对c调用notify
event对象可以让任意数量的线程挂起并等待。
threading模块提供了一个local类,称为TLS,在一个线程中做的任何更改不会对其他线程产生影响
编程代码如下:
#!/usr/bin/python
import sys
import time
import threading
b=50
l=threading.Lock()
def threadcode():
global b
print "Thread %s invoke" % threading.currentThread().getName()
l.acquire()
try:
print "Thread %s is running" % threading.currentThread().getName()
time.sleep(30)
b=b+50
print "Thread %s set b to %d" % (threading.currentThread().getName(),b)
finally:
l.release()
print "Value of b at start program:",b
childthread=[]
for i in range(1,5):
t=threading.Thread(target=threadcode,name="Thread-%d" % i)
t.start()
childthread.append(t)
for i in childthread:
t.join()
print "New value of b:",b
测试图如下:

Python2.7 threading模块学习的更多相关文章
- Python2.7 Queue模块学习
前面了解了一下threading,发现一般都是和queue模块配合使用的,queue产生一个队列,队列模式有3种,针对这三种队列分别有三个构造函数: 1 FIFO队列先进先出:class Queue. ...
- python进阶笔记 thread 和 threading模块学习
Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁.threading基于Java的线程模型设计.锁(Lock)和条件变 ...
- Python学习笔记- Python threading模块
Python threading模块 直接调用 # !/usr/bin/env python # -*- coding:utf-8 -*- import threading import time d ...
- Python模块学习:threading 多线程控制和处理
Reference:http://python.jobbole.com/81546/ threading.Thread Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有 ...
- Python模块学习------ 多线程threading(2)
一.避免使用thread模块,使用threading模块的原因: 1. 更高级别的threading模块更为先进,对线程的支持更加完善.而且使用thread模块的属性有可能会与threading 出现 ...
- python学习笔记之使用threading模块实现多线程(转)
综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势 ...
- threading模块和queue模块实现程序并发功能和消息队列
简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...
- python threading基础学习
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' """ python是支持多线程的,并 ...
- python 多线程编程之threading模块(Thread类)创建线程的三种方法
摘录 python核心编程 上节介绍的thread模块,是不支持守护线程的.当主线程退出的时候,所有的子线程都将终止,不管他们是否仍在工作. 本节开始,我们开始介绍python的另外多线程模块thre ...
随机推荐
- 使用python下载图片(福利)
刚学python 没多久, 代码处处是漏洞,也希望各位大佬理解一下 爬出来的图片... 使用的 是 https://www.tianapi.com/ 接口下的 美女图片... (需要自己注册一个账号 ...
- go语言日期时间格式化
原文: http://www.golangprograms.com/get-current-date-and-time-in-various-format-in-golang.html package ...
- 多机部署lnmp-1
第一台部署Nginx [root@lnmp ~]# cat /etc/yum.repos.d/nginx.repo[nginx]name=nginx repobaseurl=http://nginx. ...
- BZOJ2140 稳定婚姻[强连通分量]
发现如果$B_i$和$G_j$配对,那么$B_j$又要找一个$G_k$配对,$B_k$又要找一个$G_l$配对,一直到某一个$B_x$和$G_i$配对上为止,才是不稳定的. 暴力是二分图匹配.匈牙利算 ...
- 串口+RS485驱动
其实RS485不算什么协议,只是物理层做了差分传输,AB两线的电压差来表示0,1,0,1,可靠性和距离更加好,因此,一个串口外设只能作为半双工使用,而RS232是可以全双工的. max485模块可以直 ...
- [Python自学] day-20 (Django-ORM、Ajax)
一.外键跨表操作(一对多) 在 [Python自学] day-19 (2) (Django-ORM) 中,我们利用外键实现了一对多的表操作. 可以利用以下方式来获取外键指向表的数据: def orm_ ...
- 2017 ICPC乌鲁木齐 A Coins 概率dp
Coins 题意:一开始所有n个硬币都是反面朝上的,每次必须拿k个来抛,抛的人足够聪明,问m次之后向上的硬币的期望. 首先说了这个足够聪明的意思,就是只要向反面的有k个就不会sb地去拿向正面的来抛,想 ...
- 洛谷P3935 Calculation [数论分块]
题目传送门 格式难调,题面就不放了. 分析: 实际上这个就是这道题的升级版,没什么可讲的,数论分块搞就是了. Code: //It is made by HolseLee on 18th Jul 20 ...
- 【csp模拟赛5】购物(shopping.cpp)--常规
多项式,因为每次的x相同,所以把a和b相加就行了,然后找对称轴,找离对称轴最近的整数点,然而我却写了个暴力,没看x #include <iostream> #include <cst ...
- java中Switch的实现原理浅谈
switch的转换和具体系统实现有关,如果分支比较少,可能会转换为跳转指令(条件跳转指令和无条件跳转指令).但如果分支比较多,使用条件跳转会进行很多次的比较运算,效率比较低,可能会使用一种更为高效的方 ...