温馨提示×

Ubuntu Python脚本如何实现并发执行

小樊
62
2025-06-15 08:52:01
栏目: 编程语言

在Ubuntu上使用Python实现并发执行,可以通过多种方式来完成。以下是几种常见的方法:

1. 使用 threading 模块

threading 模块允许你创建和管理线程。

import threading

def worker(num):
    """线程要执行的函数"""
    print(f"Worker: {num}")

threads = []
for i in range(5):
    thread = threading.Thread(target=worker, args=(i,))
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

2. 使用 multiprocessing 模块

multiprocessing 模块允许你创建和管理进程,适用于CPU密集型任务。

import multiprocessing

def worker(num):
    """进程要执行的函数"""
    print(f"Worker: {num}")

if __name__ == "__main__":
    processes = []
    for i in range(5):
        process = multiprocessing.Process(target=worker, args=(i,))
        processes.append(process)
        process.start()

    for process in processes:
        process.join()

3. 使用 concurrent.futures 模块

concurrent.futures 模块提供了一个高级接口来实现并发执行,支持线程池和进程池。

线程池示例

from concurrent.futures import ThreadPoolExecutor

def worker(num):
    """线程要执行的函数"""
    print(f"Worker: {num}")

with ThreadPoolExecutor(max_workers=5) as executor:
    futures = [executor.submit(worker, i) for i in range(5)]
    for future in concurrent.futures.as_completed(futures):
        pass

进程池示例

from concurrent.futures import ProcessPoolExecutor

def worker(num):
    """进程要执行的函数"""
    print(f"Worker: {num}")

if __name__ == "__main__":
    with ProcessPoolExecutor(max_workers=5) as executor:
        futures = [executor.submit(worker, i) for i in range(5)]
        for future in concurrent.futures.as_completed(futures):
            pass

4. 使用 asyncio 模块

asyncio 模块适用于I/O密集型任务,通过协程实现并发。

import asyncio

async def worker(num):
    """协程要执行的函数"""
    print(f"Worker: {num}")
    await asyncio.sleep(1)

async def main():
    tasks = [worker(i) for i in range(5)]
    await asyncio.gather(*tasks)

asyncio.run(main())

总结

  • 线程 (threading): 适用于I/O密集型任务。
  • 进程 (multiprocessing): 适用于CPU密集型任务。
  • 并发执行 (concurrent.futures): 提供了高级接口,简化了线程池和进程池的使用。
  • 异步编程 (asyncio): 适用于I/O密集型任务,通过协程实现高效的并发。

选择哪种方法取决于你的具体需求和任务的性质。

0