Rollo的Python之路多线程实例 Join 与Daemon

Posted rollost

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rollo的Python之路多线程实例 Join 与Daemon相关的知识,希望对你有一定的参考价值。

 

1.0 threading 的join方法就是用来阻塞用的,可以阻塞主线程,等待所的子线程结束后,然后再运行后面的程序:

 

import threading
import time
from time import ctime,sleep

def music(func):
    for i in range(2):
        print("I was listening to %s.%s" %(func,ctime()))
        sleep(1)
        print("end listening %s" % ctime())

def movie(func):
    for i in range(2):
        print("I was at the %s %s" %(func,ctime()))
        sleep(5)
        print("end watch %s" % ctime())

threads = []

t1 = threading.Thread(target=music,args=("overstock",))
threads.append(t1)
t2 = threading.Thread(target=movie,args=("kill them all",))
threads.append(t2)

if __name__ =="__main__":
    for t in threads:
        t.start()

    t2.join()
    print("all over %s" %ctime())

此时,会等t2运行完成后,才执行最后的print语句。

 

import threading
import time
from time import ctime,sleep

def music(func):
    for i in range(2):
        print("I was listening to %s.%s" %(func,ctime()))
        sleep(1)
        print("end listening %s" % ctime())

def movie(func):
    for i in range(2):
        print("I was at the %s %s" %(func,ctime()))
        sleep(5)
        print("end watch %s" % ctime())

threads = []

t1 = threading.Thread(target=music,args=("overstock",))
threads.append(t1)
t2 = threading.Thread(target=movie,args=("kill them all",))
threads.append(t2)

if __name__ =="__main__":
    for t in threads:
        t.start()

    t1.join()
    print("all over %s" %ctime())

此时,只会运行完t1后,就会执行最后的print

 

2.0 threading 的daemon,当我们使用setDaemon(True)方法,设置子线程为守护线程时,主线程一旦执行结束,则全部线程全部被终止执行,可能出现的情况就是,子线程的任务还没有完全执行结束,就被迫停止

import threading
import time
from time import ctime,sleep

def music(func):
    for i in range(2):
        print("I was listening to %s.%s" %(func,ctime()))
        sleep(1)
        print("end listening %s" % ctime())

def movie(func):
    for i in range(2):
        print("I was at the %s %s" %(func,ctime()))
        sleep(5)
        print("end watch %s" % ctime())

threads = []

t1 = threading.Thread(target=music,args=("overstock",))
threads.append(t1)
t2 = threading.Thread(target=movie,args=("kill them all",))
threads.append(t2)

if __name__ =="__main__":
    for t in threads:
        t.setDaemon(True)
        t.start()

    print("all over %s" %ctime())

跑完主线程,直接关闭程序。

 

import threading
import time
from time import ctime,sleep

def music(func):
    for i in range(2):
        print("I was listening to %s.%s" %(func,ctime()))
        sleep(1)
        print("end listening %s" % ctime())

def movie(func):
    for i in range(2):
        print("I was at the %s %s" %(func,ctime()))
        sleep(5)
        print("end watch %s" % ctime())

threads = []

t1 = threading.Thread(target=music,args=("overstock",))
threads.append(t1)
t2 = threading.Thread(target=movie,args=("kill them all",))
threads.append(t2)

if __name__ =="__main__":
    t2.setDaemon(True)
    for t in threads:
        
        t.start()

    print("all over %s" %ctime())

t2 setDaemon(True),守护线程,t1还是得等,但是只要t1运行完,就会不等t2,直接关闭程序

 

3.0 threading.current_thread()  线程名

4.0 threading.active_count() 在运行的线程数量。

 

以上是关于Rollo的Python之路多线程实例 Join 与Daemon的主要内容,如果未能解决你的问题,请参考以下文章

Rollo的Python之路Python 编码与解码

Rollo的Python之路Python 闭包:Colsure

Rollo的Python之路Python 爬虫系统学习 Selenium 模拟登录

Rollo的Python之路Python Split()函数 的用法

Rollo的Python之路Python 爬虫系统学习 Requests 模块学习

Rollo的Python之路Python 爬虫系统学习 Selenium