多线程一直都感觉很神秘,一直有一种懂一点,但是又觉得什么都不懂的样子,只是知道它用处多多,灰常厉害,最近在做的几个项目当中由于处理的数据较多,所以也都引入了多线程来执行程序,但是由于多线程以前接触的不是很多,所以在应用方面还是有点小尴尬,总是出现一些各式各样的问题,所以想重新系统的学习一下线程的有关知识点;
线程有5种状态,状态转换的过程如下图所示:

Python通过两个标准库thread和threading提供对线程的支持。thread提供了低级别的、原始的线程以及一个简单的锁。由于thread提供的线程功能不多,无法在主线程结束后继续运行,不提供条件变量等等原因,一般不使用thread模块,这里就不多介绍了,主要介绍一下threading模块
1> 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果
threading.active_count() threading.activeCount()
2>返回当前的线程变量
threading.current_thread() threading.currentThread()
3>返回当前正在运行的线程的列表。正在运行指线程启动后、结束前,不包括启动前和终止后的线程
threading.enumerate()
4>设置threading全局超时时间
threading.TIMEOUT_MAX
Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local
import time
import threading
# 通过继承Thread创建类
class newThread(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self.num = num
def run(self):
time.sleep(2)
print("I am", self.num)
for i in range(10):
t1 = newThread(i)
t1.start()
import time
import threading
# 使用threading.Thread直接在线程中运行函数
def run(x):
time.sleep(2)
print x
for i in range(10):
t1 = threading.Thread(target=run, args=(i,)) # 直接使用Thread附加函数,args为参数
t1.start()
import threading #锁的使用 #创建锁 mutex = threading.Lock() #锁定,果设定了timeout,则在超时后通过返回值可以判断是否得到了锁,从而可以进行一些其他的处理 mutex.acquire([timeout]) #释放 mutex.release()
with threading.Lock():
pass
import threading lock = threading.Lock() #Lock对象 lock.acquire() lock.acquire() #产生了死琐。 lock.release() lock.release() import threading rLock = threading.RLock() #RLock对象 rLock.acquire() rLock.acquire() #在同一线程内,程序不会堵塞。 rLock.release() rLock.release()
import time
import threading as th
def f1(i):
time.sleep(2)
pass
max_threadings = 10
for i in range(50):
print ‘当前线程数量‘, len(th.enumerate())
while True:
if len(th.enumerate()) < max_threadings:
try:
newthread = th.Thread(target=f1, args=(i,))
break
except:
continue
else:
pass
newthread.start()
原文:http://www.cnblogs.com/luxiaojun/p/6612745.html