多线程

Python多线程多用于IO密集型操作,对于计算密集型不适用
#1.多线程编写示例

import threading

def func(args):
    print("子线程",args)

t = threading.Thread(target= func,args=(11,))  # 11后面的逗号是为了区别括号不是集合
t.start()

print("主线程")

##########################2.主线程默认等子线程执行完毕##############################
import threading
import time

def func(arg):
    time.sleep(arg)
    print("子线程%s秒"%arg)

t1 = threading.Thread(target= func,args=(3,))
t1.start()

t2 = threading.Thread(target= func,args=(5,))
t2.start()

print("主线程")

.setDaemon(True)守护进程
##########3.主线程不在等子线程执行完毕,主线程终止则所有子线程终止#############
import threading
import time

def func(arg):
    time.sleep(arg)
    print("子线程%s秒"%arg)

t1 = threading.Thread(target= func,args=(3,))
t1.setDaemon(True)#守护进程,在start之前,为True时,主线程不在等待子线程
t1.start()

t2 = threading.Thread(target= func,args=(5,))
t2.start()

print("主线程")

.join()


#########4.开发者可以控制主线程等待子线程(最多等待时间)#############
import threading
import time

def func(arg):
    time.sleep(arg)
    print("子线程%s秒"%arg)

t1 = threading.Thread(target= func,args=(1,))
t1.start()
t1.join(2)  # 有参数n,让主线程在这里最多等待n秒,无论是否执行完毕,都会继续往下走

t2 = threading.Thread(target= func,args=(3,))
t2.start()
t2.join()# 无参数,让主线程在这等着,等到子线程t1执行完毕,才可以继续往下走。

print("主线程")

获取线程对象

#############5.获取线程名称#############
import time
import threading

def func(arg):
    t = threading.current_thread()   #获取当前执行该函数的线程的对象
    name = t.getName()  # 根据当前线程对象获取当前线程名称
    print(name,"传的值是:",arg)

t1 = threading.Thread(target= func,args=(1,))
t1.setName("子线程1")
t1.start()

t2 = threading.Thread(target=func,args=(2,))
t2.setName("子线程2")
t2.start()
time.sleep(1)
print("主线程")

线程本质

########6.线程本质#########
import threading
def func(arg):
    print(arg,"
")

t1 = threading.Thread(target=func,args=(33,))
t1.start()  #start 不是立即开始运行线程,而是告诉CPU,我已经准备好了,你可以调度我了,cpu什么时候高兴什么时候运行线程
print("主线程")

了解:面向对象版本的多线程

#######7.了解:面向对象版本的多线程########
#多线程方式:1
import threading
def func(arg):
    print(arg)

t1 = threading.Thread(target=func,args=(12,))
t1.start()

#duoxianc方式:2
class MyThread(threading.Thread):
    def run(self):
        print(self._args,self._kwargs)

t3 = MyThread(args=(44,"name=zwnsyw"))
t3.start()


 
 
原文地址:https://www.cnblogs.com/zwnsyw/p/11710750.html