翼度科技»论坛 编程开发 python 查看内容

Python多线程编程全解析:基础到高级用法

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
 
Python中有多线程的支持。Python的threading模块提供了多线程编程的基本工具。在下面,我将列举一些基础的多线程用法和一些高级用法,并提供相应的源代码,其中包含中文注释。
基础用法:

创建和启动线程
  1. import threading
  2. import time
  3. # 定义一个简单的线程类
  4. class MyThread(threading.Thread):
  5.     def run(self):
  6.         for _ in range(5):
  7.             print(threading.current_thread().name, "is running")
  8.             time.sleep(1)
  9. # 创建两个线程实例
  10. thread1 = MyThread(name="Thread-1")
  11. thread2 = MyThread(name="Thread-2")
  12. # 启动线程
  13. thread1.start()
  14. thread2.start()
  15. # 主线程等待所有子线程结束
  16. thread1.join()
  17. thread2.join()
  18. print("Main thread exiting")
复制代码
线程同步 - 使用锁
  1. import threading
  2. # 共享资源
  3. counter = 0
  4. # 创建锁
  5. counter_lock = threading.Lock()
  6. # 定义一个简单的线程类
  7. class MyThread(threading.Thread):
  8.     def run(self):
  9.         global counter
  10.         for _ in range(5):
  11.             with counter_lock:  # 使用锁保护临界区
  12.                 counter += 1
  13.                 print(threading.current_thread().name, "Counter:", counter)
  14. # 创建两个线程实例
  15. thread1 = MyThread(name="Thread-1")
  16. thread2 = MyThread(name="Thread-2")
  17. # 启动线程
  18. thread1.start()
  19. thread2.start()
  20. # 主线程等待所有子线程结束
  21. thread1.join()
  22. thread2.join()
  23. print("Main thread exiting")
复制代码
高级用法:

使用线程池
  1. import concurrent.futures
  2. import time
  3. # 定义一个简单的任务函数
  4. def task(name):
  5.     print(f"{name} is running")
  6.     time.sleep(2)
  7.     return f"{name} is done"
  8. # 使用线程池
  9. with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
  10.     # 提交任务给线程池
  11.     future_to_name = {executor.submit(task, f"Thread-{i}"): f"Thread-{i}" for i in range(5)}
  12.     # 获取任务结果
  13.     for future in concurrent.futures.as_completed(future_to_name):
  14.         name = future_to_name[future]
  15.         try:
  16.             result = future.result()
  17.             print(f"{name}: {result}")
  18.         except Exception as e:
  19.             print(f"{name}: {e}")
复制代码
使用Condition进行线程间通信
  1. import threading
  2. import time
  3. # 共享资源
  4. shared_resource = None
  5. # 创建条件变量
  6. condition = threading.Condition()
  7. # 定义一个写线程
  8. class WriterThread(threading.Thread):
  9.     def run(self):
  10.         global shared_resource
  11.         for _ in range(5):
  12.             with condition:
  13.                 shared_resource = "Write data"
  14.                 print("Writer wrote:", shared_resource)
  15.                 condition.notify()  # 通知等待的线程
  16.                 condition.wait()  # 等待其他线程通知
  17. # 定义一个读线程
  18. class ReaderThread(threading.Thread):
  19.     def run(self):
  20.         global shared_resource
  21.         for _ in range(5):
  22.             with condition:
  23.                 while shared_resource is None:
  24.                     condition.wait()  # 等待写线程通知
  25.                 print("Reader read:", shared_resource)
  26.                 shared_resource = None
  27.                 condition.notify()  # 通知写线程
  28. # 创建写线程和读线程
  29. writer_thread = WriterThread()
  30. reader_thread = ReaderThread()
  31. # 启动线程
  32. writer_thread.start()
  33. reader_thread.start()
  34. # 主线程等待所有子线程结束
  35. writer_thread.join()
  36. reader_thread.join()
  37. print("Main thread exiting")
复制代码
这些例子涵盖了一些基础和高级的多线程用法。请注意,在Python中由于全局解释器锁(GIL)的存在,多线程并不能充分利用多核处理器。如果需要充分利用多核处理器,可以考虑使用multiprocessing模块进行多进程编程。
 


来源:https://www.cnblogs.com/hanbing81868164/p/17957670
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具