import threading
import time
def task(arg):
time.sleep(5)
# 创建一个Thread对象(线程),并封装线程被CPU调度时应该执行的任务和相关参数。
t = threading.Thread(target=task, args=('xxx',))
# 线程准备就绪(等待CPU调度),代码继续向下执行。
t.start()
print("继续执行...") # 主线程执行完所有代码,不结束(等待子线程)
线程的常见方法
start
t.start()
,当前线程准备就绪(等待CPU调度,具体时间是由CPU来决定)。
import threading
number = 0
def myAdd(count):
global number
for i in range(count):
number += 1
t = threading.Thread(target=myAdd, args=(10000000,))
t.start()
print(number)
join
t.join()
,等待当前线程的任务执行完毕后再向下继续执行。
import threading
number = 0
def myAdd():
global number
for i in range(100000000):
number += 1
t = threading.Thread(target=myAdd)
t.start()
t.join() # 主线程等待中...
print(number)
import threading
number = 0
def myAdd():
global number
for i in range(10000000):
number += 1
print('myAdd over')
def mySub():
global number
for i in range(10000000):
number -= 1
print('mySub over')
t1 = threading.Thread(target=myAdd)
t2 = threading.Thread(target=mySub)
t1.start()
t1.join() # t1线程执行完毕,才继续往后走
print(666)
t2.start()
t2.join() # t2线程执行完毕,才继续往后走
print(number)
'''
myAdd over
666
mySub over
0
'''
import threading
count = 10000000
number = 0
def myAdd(count):
global number
for i in range(count):
number += 1
def mySub(count):
global number
for i in range(count):
number -= 1
t1 = threading.Thread(target=myAdd, args=(count,))
t2 = threading.Thread(target=mySub, args=(count,))
t1.start()
t2.start()
print(666)
t1.join() # t1线程执行完毕,才继续往后走
print(999)
t2.join() # t2线程执行完毕,才继续往后走
print(number)
'''
666
999
-2736356 # 每次会变
'''
setDaemon
t.setDaemon(布尔值)
,守护线程(必须放在start之前)
t.setDaemon(True)
,设置为守护线程,主线程执行完毕后,子线程也自动关闭。t.setDaemon(False)
,设置为非守护线程,主线程等待子线程,子线程执行完毕后,主线程才结束。(默认)
import threading
import time
def task(arg):
time.sleep(5)
print('task')
t = threading.Thread(target=task, args=(666,))
t.setDaemon(True) # True/False
t.start()
print('END')
线程名的设置和获取
import threading
def task(arg):
# 获取当前执行此代码的线程
name = threading.current_thread().getName()
print(name)
for i in range(6):
t = threading.Thread(target=task, args=(666,))
t.setName('精易-{}'.format(i))
t.start()
'''输出
精易-0
精易-1
精易-2
精易-3
精易-4
精易-5
'''
自定义线程类
这种语法了解就好,一般看源码可能有的大佬会写高级语法
直接将线程需要做的事写到run方法中。
import threading
class MyThread(threading.Thread):
def run(self):
print('执行此线程', self._args) # 执行此线程 (100,)
t = MyThread(args=(666,))
t.start()