欢迎访问宙启技术站
智能推送

Python函数-如何使用多进程和多线程

发布时间:2023-07-02 01:08:27

Python 提供了多种方式来实现多进程和多线程。

1. 多进程:

多进程可以实现并行执行多个任务,提高程序的运行效率。Python 中有两个主要的模块用于创建和管理多进程:

- multiprocessing 模块:该模块提供了跨平台的多进程功能,可以很方便地创建和管理多个进程。

如下示例,使用 multiprocessing 模块创建一个简单的多进程程序:

import multiprocessing

def worker():
    """子进程要执行的任务"""
    print("Worker")

if __name__ == "__main__":
    process = multiprocessing.Process(target=worker)
    process.start()  # 启动子进程
    process.join()   # 阻塞主进程,直到子进程结束

- concurrent.futures 模块:该模块提供了更高级的接口,可以很方便地使用多个进程来执行任务,并且可以返回结果。

如下示例,使用 concurrent.futures 模块创建一个简单的并发计算程序:

import concurrent.futures

def worker(n):
    """子进程要执行的任务"""
    return n * n

if __name__ == "__main__":
    with concurrent.futures.ProcessPoolExecutor() as executor:
        results = executor.map(worker, range(10))   # 并发执行任务并返回结果
        for result in results:
            print(result)

2. 多线程:

多线程可以实现并发执行多个任务,但由于 GIL(Global Interpreter Lock) 的存在,多线程在 CPU 密集型任务上的效果有限。Python 提供了 threading 模块用于创建和管理多线程。

如下示例,使用 threading 模块创建一个简单的多线程程序:

import threading

def worker():
    """子线程要执行的任务"""
    print("Worker")

if __name__ == "__main__":
    thread = threading.Thread(target=worker)
    thread.start()  # 启动子线程
    thread.join()   # 阻塞主线程,直到子线程结束

除了使用 threading 模块外,还可以使用 concurrent.futures 模块来实现多线程。

如下示例,使用 concurrent.futures 模块创建一个简单的并发计算程序:

import concurrent.futures

def worker(n):
    """子线程要执行的任务"""
    return n * n

if __name__ == "__main__":
    with concurrent.futures.ThreadPoolExecutor() as executor:
        results = executor.map(worker, range(10))   # 并发执行任务并返回结果
        for result in results:
            print(result)

综上所述,Python 提供了多进程和多线程的功能来实现并行执行任务,提高程序的运行效率。但需要根据具体的场景选择合适的方式。如果是 CPU 密集型任务,推荐使用多进程;如果是 IO 密集型任务,推荐使用多线程。