标签:height 项目 知识 max 死锁 .com 1.5 无法 tar
多线程一直都感觉很神秘,一直有一种懂一点,但是又觉得什么都不懂的样子,只是知道它用处多多,灰常厉害,最近在做的几个项目当中由于处理的数据较多,所以也都引入了多线程来执行程序,但是由于多线程以前接触的不是很多,所以在应用方面还是有点小尴尬,总是出现一些各式各样的问题,所以想重新系统的学习一下线程的有关知识点;
线程有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()
标签:height 项目 知识 max 死锁 .com 1.5 无法 tar
原文地址:http://www.cnblogs.com/luxiaojun/p/6612745.html