码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-05-23 23:19:22      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:UNC   pytho   target   出现   停止   多线程实例   %s   time   The   

 

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

标签:UNC   pytho   target   出现   停止   多线程实例   %s   time   The   

原文地址:https://www.cnblogs.com/rollost/p/10914890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!