
Python中有多线程的支持。Python的threading模块提供了多线程编程的基本工具。在下面,我将列举一些基础的多线程用法和一些高级用法,并提供相应的源代码,其中包含中文注释。
基础用法:
创建和启动线程
| import threading |
| import time |
| |
| # 定义一个简单的线程类 |
| class MyThread(threading.Thread): |
| def run(self): |
| for _ in range(5): |
| print(threading.current_thread().name, "is running") |
| time.sleep(1) |
| |
| # 创建两个线程实例 |
| thread1 = MyThread(name="Thread-1") |
| thread2 = MyThread(name="Thread-2") |
| |
| # 启动线程 |
| thread1.start() |
| thread2.start() |
| |
| # 主线程等待所有子线程结束 |
| thread1.join() |
| thread2.join() |
| |
| print("Main thread exiting") |
线程同步 - 使用锁
| import threading |
| |
| |
| counter = 0 |
| |
| |
| counter_lock = threading.Lock() |
| |
| |
| class MyThread(threading.Thread): |
| def run(self): |
| global counter |
| for _ in range(5): |
| with counter_lock: |
| counter += 1 |
| print(threading.current_thread().name, "Counter:", counter) |
| |
| |
| thread1 = MyThread(name="Thread-1") |
| thread2 = MyThread(name="Thread-2") |
| |
| |
| thread1.start() |
| thread2.start() |
| |
| |
| thread1.join() |
| thread2.join() |
| |
| print("Main thread exiting") |
高级用法:
使用线程池
| import concurrent.futures |
| import time |
| |
| |
| def task(name): |
| print(f"{name} is running") |
| time.sleep(2) |
| return f"{name} is done" |
| |
| |
| with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor: |
| |
| future_to_name = {executor.submit(task, f"Thread-{i}"): f"Thread-{i}" for i in range(5)} |
| |
| |
| for future in concurrent.futures.as_completed(future_to_name): |
| name = future_to_name[future] |
| try: |
| result = future.result() |
| print(f"{name}: {result}") |
| except Exception as e: |
| print(f"{name}: {e}") |
使用Condition进行线程间通信
| import threading |
| import time |
| |
| |
| shared_resource = None |
| |
| |
| condition = threading.Condition() |
| |
| |
| class WriterThread(threading.Thread): |
| def run(self): |
| global shared_resource |
| for _ in range(5): |
| with condition: |
| shared_resource = "Write data" |
| print("Writer wrote:", shared_resource) |
| condition.notify() |
| condition.wait() |
| |
| |
| class ReaderThread(threading.Thread): |
| def run(self): |
| global shared_resource |
| for _ in range(5): |
| with condition: |
| while shared_resource is None: |
| condition.wait() |
| print("Reader read:", shared_resource) |
| shared_resource = None |
| condition.notify() |
| |
| |
| writer_thread = WriterThread() |
| reader_thread = ReaderThread() |
| |
| |
| writer_thread.start() |
| reader_thread.start() |
| |
| |
| writer_thread.join() |
| reader_thread.join() |
| |
| print("Main thread exiting") |
这些例子涵盖了一些基础和高级的多线程用法。请注意,在Python中由于全局解释器锁(GIL)的存在,多线程并不能充分利用多核处理器。如果需要充分利用多核处理器,可以考虑使用multiprocessing模块进行多进程编程。