import threadingimport timedef task(arg):time.sleep(5)# 创建一个Thread对象(线程),并封装线程被CPU调度时应该执行的任务和相关参数。t = threading.Thread(target=task, args=('xxx',))# 线程准备就绪(等待CPU调度),代码继续向下执行。t.start()print("继续执行...") # 主线程执行完所有代码,不结束(等待子线程)
线程的常见方法
start
t.start(),当前线程准备就绪(等待CPU调度,具体时间是由CPU来决定)。
import threadingnumber = 0def myAdd(count):global numberfor i in range(count):number += 1t = threading.Thread(target=myAdd, args=(10000000,))t.start()print(number)
join
t.join(),等待当前线程的任务执行完毕后再向下继续执行。
import threadingnumber = 0def myAdd():global numberfor i in range(100000000):number += 1t = threading.Thread(target=myAdd)t.start()t.join() # 主线程等待中...print(number)
import threadingnumber = 0def myAdd():global numberfor i in range(10000000):number += 1print('myAdd over')def mySub():global numberfor i in range(10000000):number -= 1print('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 over666mySub over0'''
import threadingcount = 10000000number = 0def myAdd(count):global numberfor i in range(count):number += 1def mySub(count):global numberfor i in range(count):number -= 1t1 = 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)'''666999-2736356 # 每次会变'''
setDaemon
t.setDaemon(布尔值) ,守护线程(必须放在start之前)
t.setDaemon(True),设置为守护线程,主线程执行完毕后,子线程也自动关闭。t.setDaemon(False),设置为非守护线程,主线程等待子线程,子线程执行完毕后,主线程才结束。(默认)
import threadingimport timedef task(arg):time.sleep(5)print('task')t = threading.Thread(target=task, args=(666,))t.setDaemon(True) # True/Falset.start()print('END')
线程名的设置和获取
import threadingdef 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 threadingclass MyThread(threading.Thread):def run(self):print('执行此线程', self._args) # 执行此线程 (100,)t = MyThread(args=(666,))t.start()
