多线程

  1. import threading
  2. # 当前处于活动状态的线程个数
  3. print(threading.active_count())
  4. # 返回当前的Thread对象
  5. print(threading.current_thread())
  6. # 返回主线程对象
  7. print(threading.main_thread())

添加线程

子线程不会阻塞主线程。

  1. import threading
  2. import time
  3. # 创建一个子线程
  4. # - 线程对象
  5. # - 函数体
  6. # 函数体
  7. def printMessage(message):
  8. time.sleep(2)
  9. print("HI~")
  10. print(message)
  11. # 创建线程对象 target指定函数体,name指定进程名称 args接受参数
  12. t = threading.Thread(
  13. target=printMessage,
  14. name="my thread",
  15. args=["有一点想你"])
  16. # 启动线程
  17. t.start()
  18. print("线程已经启动辣~")

输出结果:

  1. 线程已经启动辣~
  2. HI~
  3. 有一点想你

自定义线程类实现线程体

  1. import threading
  2. import time
  3. class MyThread(threading.Thread):
  4. def __init__(self,message,*args,**kwargs):
  5. super().__init__(*args,**kwargs)
  6. self.message = message
  7. def run(self):
  8. time.sleep(2)
  9. print("HI")
  10. print(self.message)
  11. t = MyThread(name="myThread",message="想你了咋治?")
  12. t.start()
  13. print("不想见不到你~")

输出结果:

  1. 不想见不到你~
  2. HI
  3. 想你了咋治?

线程管理

有时,一个线程(假设是主线程)需要等待另外一个线程(假设是
t1子线程)执行结束才能继续执行。

  1. t.start()
  2. t.join() # 阻塞进程,t结束后才继续进行

线程池

  1. from concurrent.futures import ThreadPoolExecutor
  2. def printMessage(message):
  3. print(message)
  4. return message
  5. # 使用方法1
  6. with ThreadPoolExecutor() as pool:
  7. for i in range(100):
  8. pool.submit(printMessage,i)
  9. # 使用方法2
  10. with ThreadPoolExecutor() as pool:
  11. # results 为printMessage的返回值集合,顺序与map的第二个参数的顺序一致
  12. results = pool.map(printMessage,range(1,100))
  13. for result in results:
  14. print(result)