Python 创建线程

本文介绍了Python中创建线程的三种方法:通过Thread对象传入函数、传入可调用类对象以及继承Thread类。建议使用threading模块而非thread模块。文中列举了每种方法的示例,并强调Thread对象的args参数必须接收迭代器。对于更多线程知识,推荐查阅《Python核心编程》。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

       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 核心编程。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值