python模块学习(threading模块中的Thread类)

学习版本3.5.2

1.实例化线程对象并初始化,用start()方法可以启动线程

__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)

group是留着以后扩展用的,target是一个方法,name是线程名,args是位置变量的元组,kwargs是关键字变量的字典,daemon是是否为守护线程

#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

from threading import Thread
import time

def test(str):
    print("begin:",str)
    time.sleep(5)
    print("end:",str)

if __name__ == "__main__":
    threadlist = []
    for i in range(5):
        t = Thread(target=test,args=(i,))
        threadlist.append(t)

    for t in threadlist:
        t.start()

运行结果

begin: 0
begin: 1
begin: 2
begin: 3
begin: 4
end: 0
end: 3
end: 4
end: 2
end: 1

2.join(self, timeout=None)方法,阻塞当前线程直到线程结束,设置了timeout时候等待设置的时间之后就释放阻塞

也就是说,join()之后的语句得等该线程运行完成之后才会调用

不用join()时候
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

from threading import Thread
import time

def test(str):
    print("begin:",str)
    time.sleep(5)
    print("end:",str)

if __name__ == "__main__":
    threadlist = []
    for i in range(5):
        t = Thread(target=test,args=(i,))
        threadlist.append(t)

    for t in threadlist:
        t.start()

    print("main")
运行结果
begin: 0
begin: 1
begin: 2
begin: 3
begin: 4
main
end: 0
end: 3
end: 2
end: 4
end: 1

加了join()来阻塞了主线程
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

from threading import Thread
import time

def test(str):
    print("begin:",str)
    time.sleep(5)
    print("end:",str)

if __name__ == "__main__":
    threadlist = []
    for i in range(5):
        t = Thread(target=test,args=(i,))
        threadlist.append(t)

    for t in threadlist:
        t.start()

    threadlist[0].join()
    print("main")

运行结果
begin: 0
begin: 1
begin: 2
begin: 3
begin: 4
end: 0
end: 3
end: 2
main
end: 1
end: 4

3.run()方法与start()方法的区别
start()方法是启动了一个线程,run()方法只是一个线程体。start()方法是启动一个线程来运行了run()方法。
run()方法调用了我们初始化Thread对象时候传入的target方法。run()方法经常被我们重写。

用run()
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

from threading import Thread
import time

def test(str):
    print("begin:",str)
    time.sleep(5)
    print("end:",str)

if __name__ == "__main__":
    threadlist = []
    for i in range(5):
        t = Thread(target=test,args=(i,))
        threadlist.append(t)

    for t in threadlist:
        t.run()

    print("main")

运行结果

begin: 0
end: 0
begin: 1
end: 1
begin: 2
end: 2
begin: 3
end: 3
begin: 4
end: 4
main

用start()

#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

from threading import Thread
import time

def test(str):
    print("begin:",str)
    time.sleep(1)
    print("end:",str)

if __name__ == "__main__":
    threadlist = []
    for i in range(5):
        t = Thread(target=test,args=(i,))
        threadlist.append(t)

    for t in threadlist:
        t.start()

    print("main")

运行结果

begin: 0
begin: 1
begin: 2
begin: 3
begin: 4
main
end: 1
end: 2
end: 0
end: 3
end: 4

4.其它方法和变量

getName(self),setName(self,name),name 跟线程名字相关

isDaemon(self),setDaemon(self, daemonic),daemon 跟是否是守护线程相关

is_alive(self),isAlive(self) 这两个效果一样,返回线程是否还在alive状态

ident 线程的标示符

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值