Python 创建线程

来源:互联网 发布:美国政治正确 知乎 编辑:程序博客网 时间:2024/06/06 00:18

       关于 线程 是什么东东 就不介绍了,直接进入正题。

       Python 有多个模块可以支持多线程,thread,threading,Queue。此处不提Queue,有兴趣自己了解

       thread模块提供了基本的线程和锁得支持,threading 提供了更全面的更高级的线程支持。因此除非特别需要,否则请使用threading而不是thread。

       Python创建线程一般来说有三种方式:

                       1.创建一个Thread对象,传入一个函数

                       2.创建一个Thread对象,传入一个可调用的类对象

                       3.创建一个类对象,该对象继承自Thread

       至于如何创建线程,请看个人爱好与需求

第一种方式:   创建一个Thread对象,传入一个函数

import threadingfrom time import ctime,sleepdef 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 threadingfrom time  import ctime,sleepclass 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 threadingfrom time  import ctime,sleepclass 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 核心编程。

本人初学者。如何任何不当之处,欢迎指正,谢谢!

0 0
原创粉丝点击