首页 > 代码库 > python——线程相关

python——线程相关

使用python的threading中的Thread

下面是两种基本的实现线程的方式:

第一种方式————

#coding=utf-8

"""
thread的第一种声明及调用方式
"""

from threading import Thread
import time

def func():
    while True:
        print time.ctime()
        time.sleep(1)

def func1():
    while True:
        print "func1", time.ctime()
        time.sleep(2)

#将要执行的方法作为参数传给Thread的构造方法
    
t = Thread(target=func)
t.start()

t1 = Thread(target=func1)
t1.start()

第二种方式————

#coding=utf-8

"""
thread的第二种声明及调用方法
"""

import time
from threading import Thread
from time import sleep

#从Thread继承,并重写run()
class myThread(Thread):
    def __init__(self, threadname):
        Thread.__init__(self, name=threadname)
    
    def run(self):
        while True:
            print self.getName() + " " + time.ctime()
            time.sleep(1)
            
t = myThread("thread_1")
t.start()

t1 = myThread("thread_2")
t1.start()
            

 

接下来是:join和setDaemon的方法调用及具体区别:

join的方法调用:

#coding=utf-8

"""
join方法的含义是:存在A主线程,B子线程,在A主线程中生成了一个子线程B,
如果子线程B调用了join方法,则主线程需要等待子线程操作结束,才能够继续往下执行,主线程会被阻塞
"""
import time
from threading import Thread

class myThread(Thread):
    def __init__(self, threadname):
        Thread.__init__(self, name = threadname)
    
    def run(self):
        time.sleep(10)
        print self.getName() + " " + time.ctime()
        
    
def mainfunc():
    for i in range(5):
        print i    
    
if __name__ == "__main__":
    t = myThread("childthread")
    t.start()
    #增加join方法的调用,则程序运行时的表现是:先子线程(会先sleep 10s,之后打印子线程的内容),再运行主线程中的打印从0到4的逻辑
    #不增加join方法的调用,则程序运行时的表现是:会先走主线程的打印从0到4的逻辑,之后子线程(sleep 10s,再打印子线程中的内容),但其实这里就是没有等待子线程
#     t.join()
    mainfunc()

 

setDaemon方法的调用:

#coding=utf-8

"""
daemon方法的含义是:存在主线程A,和子线程B,子线程B是从主线程A中生成的
如果设置子线程B为daemon即守护进程,则主线程A不存在的话,子线程B就退出
如果没有设置子线程B为daemon,则主线程A结束运行退出之后,子线程B也不退出
"""

import time
from threading import Thread

class myThread(Thread):
    def __init__(self, threadname):
        Thread.__init__(self, name=threadname)
    
    def run(self):
        time.sleep(10)
        print self.getName() + " " + time.ctime()
    
def mainfunc():
    for i in range(5):
        print i

if __name__ == "__main__":
    t = myThread("zixiancheng")
    #不设置子线程为守护进程,则主线程退出,子线程继续运行
    #设置子线程为守护进程,则主线程退出,子线程直接退出
    #并且,需要在start之前调用setDaemon
#     t.setDaemon(True)
    t.start()
    mainfunc()
    

 

python——线程相关