Python3.4线程入门

比较成熟的编程语言,基本上都有对线程的支持,而python也不例外,下面散仙来看下python里面对几个线程比较的类或方法:

    python多线程编程,一般使用thread和threading模块。thread模块想对较底层,threading模块对thread模块进行了封装,更便于使用。所有,通常多线程编程使用threading模块。

(一)threading模块

Thread 线程类,这是我们用的最多的一个类,你可以指定线程函数执行或者继承自它都可以实现子线程功能;
Timer与Thread类似,但要等待一段时间后才开始运行;
Lock 锁原语,这个我们可以对全局变量互斥时使用;
RLock 可重入锁,使单线程可以再次获得已经获得的锁;
Condition 条件变量,能让一个线程停下来,等待其他线程满足某个“条件”;
Event 通用的条件变量。多个线程可以等待某个事件发生,在事件发生后,所有的线程都被激活;
Semaphore为等待锁的线程提供一个类似“等候室”的结构;
BoundedSemaphore 与semaphore类似,但不允许超过初始值;
Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。


(1)threading.Thread类
getName(self) 返回线程的名字
isAlive(self) 布尔标志,表示这个线程是否还在运行中
isDaemon(self) 返回线程的daemon标志
join(self, timeout=None) 程序挂起,直到线程结束,如果给出timeout,则最多阻塞timeout秒
run(self) 定义线程的功能函数
setDaemon(self, daemonic) 把线程的daemon标志设为daemonic
setName(self, name) 设置线程的名字
start(self) 开始线程执行

(2)threading.Queue类
Queue队列
LifoQueue后入先出(LIFO)队列
PriorityQueue 优先队列


下面,来看下在python里面创建使用线程的三种方法:
1,使用_thread模块来创建:

import  _thread
import  time
import  threading

def hello(index):
     for v in range(5):
        time.sleep(2)
        print("线程",v,index)




def test():

    t1=_thread.start_new_thread(hello , (1,))
    t2=_thread.start_new_thread(hello , (2,))



#启动
test()
#等待子线程执行完任务
time.sleep(2000)



2,使用threading.Thread类来创建:

import  threading
import  time


#打印当前线程的名字
def z():
    print("线程名: "+threading.current_thread().getName())



t1=threading.Thread(target=z,name="my")
t1.start()
#t1.join()


3,继承线程类来实现的方式:
import threading
import  time
import  random




class MyThread(threading.Thread):

    def __init__(self,name):
        threading.Thread.__init__(self,name=name)
    def run(self):
        for i in range(5):
            time.sleep(random.randint(1,10))
            print("我是",self.name,"线程",i)



a=MyThread("A")
# a.setDaemon(True)
a.start()
b=MyThread("B")
# b.setDaemon(True)
b.start()
a.join()
b.join()
print("主线程退出,end!")




三种方式,第一种比较偏底层,后面两种用着都不错,看个人情况了,最合适的就是最好的。





你可能感兴趣的:(多线程,python)