Python多线程学习

[url]http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html[/url]
一、Python中的线程使用:
Python中使用线程有两种方式:函数或者用类来包装线程对象。

1、 函数式:调用thread模块中的start_new_thread()函数来产生新线程。如下例:
#!/usr/bin/python
# encoding=gbk

import time
import sys
import os
import thread


def sayHeool(flag, interval, n):
while True:
print flag, n
n = n + 1
time.sleep(interval)


def main():
thread.start_new_thread(sayHeool, ("A", 3, 1))
thread.start_new_thread(sayHeool, ("B", 2, 2))
thread.start_new_thread(sayHeool, ("C", 1, 3))
if __name__ == "__main__":
main()
time.sleep(10) # 让子线程运行10s,否在报异常

上面的例子定义了一个线程函数timer,它打印出10条时间记录后退出,每次打印的间隔由interval参数决定。thread.start_new_thread(function, args[, kwargs])的第一个参数是线程函数(本例中的timer方法),第二个参数是传递给线程函数的参数,它必须是tuple类型,kwargs是可选参数。

线程的结束可以等待线程自然结束,也可以在线程函数中调用thread.exit()或thread.exit_thread()方法。

2、 创建threading.Thread的子类来包装一个线程对象,如下例:
import threading
import time
class timer(threading.Thread): #The timer class is derived from the class threading.Thread
def __init__(self, num, interval): #必需做初始化
threading.Thread.__init__(self) #必需做初始化,否在无法运行
self.thread_num = num
self.interval = interval
self.thread_stop = False #最好定义结束线程标志

def run(self): #Overwrite run(): #业务方法,必需覆盖
while not self.thread_stop:
print 'Thread Object(%d), Time:%s/n' %(self.thread_num, time.ctime())
time.sleep(self.interval)
def stop(self):
self.thread_stop = True #让线程结束标志为真


def test():
thread1 = timer(1, 1)
thread2 = timer(2, 2)
thread1.start()
thread2.start()

time.sleep(10)

thread1.stop()
thread2.stop()
return

if __name__ == '__main__':
test()


就我个人而言,比较喜欢第二种方式,即创建自己的线程类,必要时重写threading.Thread类的方法,线程的控制可以由自己定制。

threading.Thread类的使用:

[color=red][b]1,在自己的线程类的__init__里调用threading.Thread.__init__(self, name = threadname)[/b][/color]

Threadname为线程的名字

[color=red][b]2, run(),通常需要重写,编写代码实现做需要的功能。[/b][/color]

3,getName(),获得线程对象名称

4,setName(),设置线程对象名称

[color=red][b]5,start(),启动线程[/b][/color]

6,jion([timeout]),等待另一线程结束后再运行。

7,setDaemon(bool),设置子线程是否随主线程一起结束,必须在start()之前调用。默认为False。

8,isDaemon(),判断线程是否随主线程一起结束。

9,isAlive(),检查线程是否在运行中。

此外threading模块本身也提供了很多方法和其他的类,可以帮助我们更好的使用和管理线程。可以参看[url]http://www.python.org/doc/2.5.2/lib/module-threading.html[/url]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值