Python中使用线程有两种方式:函数,或者用类来包装线程对象;
函数方式:调用thread模块中的start_new_thread(function,args[,kwargs])函数来产生新的线程,不过这种方法要求此方法和线程运行的方法在同一个类(级别相同)中;
参数说明:
Function:线程函数
Args:传递给线程函数的参数,他必须是个tuple(元组)类型
Kwargs:可选参数
#coding=utf-8
import thread;
import time;
def print_time(threadName,delay):
count=0;#两个线程共享的是这同一个count
while count<5:
time.sleep(1);
count+=1
print "%s: %s" % ( threadName, time.ctime(time.time()) ),"count=\t"+str(count);
#创建两个线程
try:
thread.start_new_thread(print_time,("thread_name___1",2));
thread.start_new_thread(print_time,("thread_name___2",3));
except BaseException as reason:
print "error"
while 1:
pass
备注:此种方式要求定义线程的级别和启动线程的级别是一致的(启动线程的方法参数中需要方法名);
方式二:类继承threading.Thread,然后重写init()和run()方法
import time;
import threading;
exitFlag = 0
class myThread(threading.Thread): # 继承父类threading.Thread
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self): # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
print "Starting " + self.name
print_time(self.name, self.counter, 5)
print "Exiting " + self.name
#这边表明了在python的一个类中,各个方法不能互相调用;
def print_time(threadName, delay, counter):
while counter:#当counter被减到0的时候退出循环,
if exitFlag:
threading.Thread.exit()
time.sleep(delay)
print "%s: %s" % (threadName, time.ctime(time.time()))
counter -= 1
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启线程
thread1.start()
thread2.start()
print "Exiting Main Thread"#主线程直接运行结束