关于 线程 是什么东东 就不介绍了,直接进入正题。
Python 有多个模块可以支持多线程,thread,threading,Queue。此处不提Queue,有兴趣自己了解
thread模块提供了基本的线程和锁得支持,threading 提供了更全面的更高级的线程支持。因此除非特别需要,否则请使用threading而不是thread。
Python创建线程一般来说有三种方式:
1.创建一个Thread对象,传入一个函数
2.创建一个Thread对象,传入一个可调用的类对象
3.创建一个类对象,该对象继承自Thread
至于如何创建线程,请看个人爱好与需求
第一种方式: 创建一个Thread对象,传入一个函数
import threading
from time import ctime,sleep
def func(thread):
print 'i am thread',thread,'nothing else'
sleep(5)
print 'thread',thread,'is over'
def main():
t1 = threading.Thread(target = func,args = (1,))
sleep(2)
t2 = threading.Thread(target = func,args = (1,))
t1.start()
t2.start()
t1.join()
t2.join()
if __name__ == '__main__':
main()
Thread 的 args 参数要求 必须返回一个迭代器,因此 把 (1,) 改为 1 是不可以的 ,会报错。如下
start() 开始线程
join() 等待线程结束
第二种方式:创建一个Thread对象,传入一个可调用的类对象
import threading
from time import ctime,sleep
class Mythread (object) :
def __init__(self,func,args):
self.func = func
self.args = args
def __call__(self):
self.func(self.args)
def func(thread):
print 'i am thread',thread,'nothing else'
sleep(5)
print 'thread',thread,'is over'
def main():
t1 = threading.Thread(target=Mythread(func,1))
t2 = threading.Thread(target=Mythread(func,2))
t1.start()
sleep(2)
t2.start()
t1.join()
t2.join()
if __name__ == '__main__':
main()
第三种方式:创建一个类对象,该对象继承自Thread
import threading
from time import ctime,sleep
class MyThread(threading.Thread):
def __init__(self,func,args):
threading.Thread.__init__(self)
self.func = func
self.args = args
def run(self):
self.func(self.args)
def func(thread):
print 'i am thread',thread,'nothing else'
sleep(5)
print 'thread',thread,'is over'
def main():
t1 = MyThread(func,1)
t2 = MyThread(func,2)
t1.start()
sleep(2)
t2.start()
t1.join()
t2.join()
if __name__ == '__main__':
main()
更多线程方面细节知识,请查阅Python 核心编程。
本人初学者。如何任何不当之处,欢迎指正,谢谢!