Python3基础-线程、进程

无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行

<python的线程与threading模块>

直接调用

import  threading #线程
import  time
def sayhi(name):
    print("hello %s"%name)
    time.sleep(5)

if __name__ == "__main__":

    t1 =threading.Thread(target=sayhi,args=("beijing",)) #生成一个线程实例

    t1.start()#启动线程

    print(t1.getName()) #获取线程名


###############################
hello beijing
Thread-1

Process finished with exit code 0
import  threading #线程
import  time
def sayhi(name):
    print("hello %s \n"%name)
    time.sleep(5)

if __name__ == "__main__":

    t1 =threading.Thread(target=sayhi,args=("beijing",)) #生成一个线程实例
    t2 = threading.Thread(target=sayhi,args=("FuJian",))

    t1.start()#启动线程
    t2.start()#启动线程

    print(t1.getName()) #获取线程名
    print(t2.getName())

==================================
hello beijing 

hello FuJian 

Thread-1
Thread-2

继承式调用

import threading
import time


class MyThread(threading.Thread):
    def __init__(self, num):
        threading.Thread.__init__(self)
        self.num = num

    def run(self):  # 定义每个线程要运行的函数

        print("running on number:%s" % self.num)

        time.sleep(3)


if __name__ == '__main__':
    t1 = MyThread(1)
    t2 = MyThread(2)
    t1.start()
    t2.start()

    print("ending......")
View Code

Join&setDaemon方法

##Join方法

"""
import  threading #线程
import  time
def sayhi():
    print("hello %s "%time.ctime())
    time.sleep(5)
    print("stop to hello  %s "%time.ctime())

def music():
    print("begin to listen %s"%time.ctime())
    time.sleep(3)
    print("stop to listen %s"%time.ctime())

if __name__ == "__main__":

    t1 =threading.Thread(target=sayhi) #生成一个线程实例
    t2 = threading.Thread(target=music)

    t1.start()#启动线程
    t2.start()#启动线程

    print("ending......")

###
hello Fri Aug 14 14:06:34 2020 
begin to listen Fri Aug 14 14:06:34 2020
ending......
stop to listen Fri Aug 14 14:06:37 2020
stop to hello  Fri Aug 14 14:06:39 2020 
没有Join方法
import  threading #线程
import  time
def sayhi():
    print("hello %s "%time.ctime())
    time.sleep(5)
    print("stop to hello  %s "%time.ctime())

def music():
    print("begin to listen %s"%time.ctime())
    time.sleep(3)
    print("stop to listen %s"%time.ctime())

if __name__ == "__main__":

    t1 =threading.Thread(target=sayhi) #生成一个线程实例
    t2 = threading.Thread(target=music)

    t1.start()#启动线程
    t2.start()#启动线程

    t1.join()
    t2.join()

    print("ending......")



####
hello Fri Aug 14 14:10:21 2020 
begin to listen Fri Aug 14 14:10:21 2020
stop to listen Fri Aug 14 14:10:24 2020
stop to hello  Fri Aug 14 14:10:26 2020 
ending......
带Join方法

##setDaemon方法

import  threading #线程
import  time
def sayhi():
    print("hello %s "%time.ctime())
    time.sleep(5)
    print("stop to hello  %s "%time.ctime())

def music():
    print("begin to music %s"%time.ctime())
    time.sleep(3)
    print("stop to music %s"%time.ctime())

if __name__ == "__main__":

    t1 =threading.Thread(target=sayhi) #生成一个线程实例
    t2 = threading.Thread(target=music)

    t1.setDaemon(True) ##注意:一定在start之前设置
    t1.start()#启动线程
    t2.start()#启动线程


    print("ending......")
#####
hello Fri Aug 14 14:19:17 2020 
begin to music Fri Aug 14 14:19:17 2020
ending......
stop to music Fri Aug 14 14:19:20 2020
setDaemmon在start之前设置

 

 

join():在子线程完成运行之前,这个子线程的父线程将一直被阻塞。

setDaemon(True):

         将线程声明为守护线程,必须在start() 方法调用之前设置, 如果不设置为守护线程程序会被无限挂起。这个方法基本和join是相反的。

         当我们 在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程 就分兵两路,分别运行,那么当主线程完成

         想退出时,会检验子线程是否完成。如 果子线程未完成,则主线程会等待子线程完成后再退出。但是有时候我们需要的是 只要主线程

         完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以 用setDaemon方法啦

其他方法

# run():  线程被cpu调度后自动执行线程对象的run方法
# start():启动线程活动。
# isAlive(): 返回线程是否活动的。
# getName(): 返回线程名。
# setName(): 设置线程名。

threading模块提供的一些方法:
# threading.currentThread(): 返回当前的线程变量。
# threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
# threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------

posted @ 2020-08-27 19:19  槑槑DE  阅读(80)  评论(0)    收藏  举报