Python简单实现多线程例子

使用Python实现多线程的例子,演示如何在主线程内分别启动ABC三个线程,并实现启动和停止指定线程的功能

``
import threading
import time

  # 定义一个全局标志,用于控制线程的运行状态
  stop_thread_A = False
  stop_thread_B = False
  stop_thread_C = False

  # 线程A的函数
  def thread_A():
      while not stop_thread_A:
          print("Thread A is running")
          time.sleep(1)
      print("Thread A is stopped")

  # 线程B的函数
  def thread_B():
      while not stop_thread_B:
          print("Thread B is running")
          time.sleep(1)
      print("Thread B is stopped")

  # 线程C的函数
  def thread_C():
      while not stop_thread_C:
          print("Thread C is running")
          time.sleep(1)
      print("Thread C is stopped")

  # 启动线程的函数
  def start_threads():
      global thread_a, thread_b, thread_c

      # 创建线程
      thread_a = threading.Thread(target=thread_A)
      thread_b = threading.Thread(target=thread_B)
      thread_c = threading.Thread(target=thread_C)

      # 启动线程
      thread_a.start()
      thread_b.start()
      thread_c.start()

  # 停止指定线程的函数
  def stop_thread(thread_name):
      global stop_thread_A, stop_thread_B, stop_thread_C

      if thread_name == 'A':
          stop_thread_A = True
      elif thread_name == 'B':
          stop_thread_B = True
      elif thread_name == 'C':
          stop_thread_C = True

  if __name__ == "__main__":
      # 启动ABC三个线程
      start_threads()

      # 主线程等待5秒
      time.sleep(5)

      # 停止线程A
      stop_thread('A')

      # 主线程等待5秒
      time.sleep(5)

      # 停止线程B和C
      stop_thread('B')
      stop_thread('C')

      # 确保所有线程已经停止
      thread_a.join()
      thread_b.join()
      thread_c.join()

      print("All threads have been stopped")

``
注意事项
线程安全:在多线程编程中,访问和修改共享资源时要小心,以避免竞态条件和数据不一致问题。使用锁(Lock)可以确保线程安全。
停止线程的方式:使用标志变量来控制线程的停止是一个常见的方法,避免使用强制终止线程的方法(如threading.Thread的terminate()),因为这可能会导致资源未正确释放等问题。
线程的生命周期:确保主线程在退出前等待所有子线程结束,使用join()方法可以确保这一点。
这个示例展示了如何使用Python的threading模块来启动和停止线程,并解释了相关的注意事项和代码细节。

posted @   只想安静的搬砖  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示