多线程好比员工开公司,老板分配任务给员工,员工去工作后,老板也做自己的工作
1.多线程方法1→ 用函数
from threading import Thread
def func():
for i in range(100):
print ('func',i)
# 多线程可以理解为开公司,线程为公司招聘的员工,然后让员工干活,老板该干啥干啥,员工和老板互不影响
if __name__ == '__main__':
t = Thread(target=func) # 创建一个线程,并给线程安培任务,任务放在target里
t.start() # 多线程为可以开始工作状态,具体执行时间由CPU决定
t2 = Thread(target=func) # 这是老板招聘的第二个员工
t2.start()
for i in range(10):
print('main:',i)
>>>
func 0
func 1
func 2
func 3
func 4
2.多线程方法2 → 用类
from threading import Thread
class MyThread(Thread): # 继承Thread,老鼠的儿子会打洞,所以MyThread也会打洞
def run(self): # run是固定的,当线程被执行时,被执行的就是rund()
for i in range(100):
print('子线程',i)
if __name__ == '__main__':
t = MyThread() # 创建一个对象
# t.run() 这个是错误的,直接调用上面的run方法,就变单线程了
t.start() # 开启线程,告诉CPU,可以执行了
for i in range(100):
print('主线程',i)
>>>
子线程 0
子线程主线程 1
0
主线程 子线程 2
子线程 3
给线程起名字,当线程很多分辨不过来,可以单独取名
from threading import Thread
def func(name):
for i in range(10):
print (name,i)
if __name__ == '__main__':
t = Thread(target=func,args=('子线程名',)) # 有多个线程,给线程起名,用args,入参是元组
t.start() # 多线程为可以开始工作状态,具体执行时间由CPU决定
t2 = Thread(target=func,args=('第二个子线程名字:',))
t2.start()
for i in range(10):
print('main:',i)
>>>
子线程名 8
子线程名 9
第二个子线程名字: main:0 0
main: 第二个子线程名字:1
main: 1
第二个子线程名字: 2
上面2个方法感觉用第一个更直观点