python thread,threading模块提供了对多线程的支持,不过通常我们使用threading模块来进行多线程编程。
多线程模块使用方法:
1. 使用thread模块中的start_new_thread(function,元组参数[,字典参数])来执行函数,通常直接在python shell下执行。
2. 继承 threading.Thread 类,覆盖 run方法。
以下举例说明两种用法:
方法1:
>>> import thread
>>>
>>> def run(num):
... for i in range(num):
... print i
...
>>>
... thread.start_new_thread(run,(10,))
方法2:
# -*- coding:utf-8 -*-
# 功能:多线程数值累加
# author:herong
# date:2013/4/29
import threading
import time
#######类定义#################################
class MyThread(threading.Thread):
'''求合线程类'''
def __init__(self,name,start,end):
threading.Thread.__init__(self,name=name)
self.__end = end
self.__start = start
def run(self):
global glTotal
global gThreadCnt
sum = 0
for i in range(self.__start,self.__end+1):
sum+=i
time.sleep(1)
#获取锁
gLock.acquire()
try:
glTotal+=sum
gThreadCnt+=1
finally:
#释放锁
gLock.release()
#pass;
print '#Thread-%s,(sum(%s-%s))=%s\n'%(self.getName(),self.__start,self.__end,sum)
#time.sleep(2)
#################全局变量区############################
#总和
glTotal = 0
#控制变量
gThreadCnt = 0
#锁对象
gLock = threading.RLock()
goThreadArray = []
#################执行代码块############################
step = 10
for i in range(10,100+1,step):
t = MyThread(i/10,i-step+1,i)
goThreadArray.append(t)
for i in goThreadArray:
i.start()
#i.join()
#for i in goThreadArray:
#i.join()
while gThreadCnt < 10:
print 'wait...\n'
time.sleep(1)
print 'Total:',glTotal
输出结果:
E:\python\thread>python test2.py
wait...
#Thread-1,(sum(1-10))=55
#Thread-2,(sum(11-20))=155
wait...
#Thread-4,(sum(31-40))=355
#Thread-6,(sum(51-60))=555
#Thread-8,(sum(71-80))=755
#Thread-3,(sum(21-30))=255
#Thread-7,(sum(61-70))=655
#Thread-9,(sum(81-90))=855
#Thread-5,(sum(41-50))=455
#Thread-10,(sum(91-100))=955
Total: 5050