Python多进程机制实例详解

Python多进程机制实例详解

什么是进程?

进程是指在操作系统中独立运行的一个程序,一个程序可以拥有多个进程。

为什么使用多进程?

多进程可以提高程序运行效率,因为多个进程可以同时运行。此外,多进程可以让程序更加稳定,如果一个进程崩溃了,其它进程还可以继续运行。

如何使用Python实现多进程?

使用Python内置的multiprocessing模块可以非常方便地实现多进程。

方法一:使用Process类

import multiprocessing

def func(num):
    print("Process {} started".format(num))

if __name__ == '__main__':
    # 创建10个进程
    for i in range(10):
        p = multiprocessing.Process(target=func, args=(i,))
        p.start()

上述代码使用Process类创建了10个进程,每个进程都执行了func函数。这里需要注意的是,必须要在if name == 'main':语句块中创建进程,否则会出现运行时错误。

方法二:使用Pool类

import multiprocessing

def func(num):
    print("Process {} started".format(num))

if __name__ == '__main__':
    # 创建进程池,最多有10个进程同时执行
    p = multiprocessing.Pool(10)

    # 向进程池中添加任务
    for i in range(10):
        p.apply_async(func, args=(i,))

    # 关闭进程池
    p.close()
    p.join()

上述代码使用Pool类创建了一个含有10个进程的进程池,每个进程都可以执行func函数。其中,p.apply_async方法用于向进程池中添加任务,close和join方法则用于结束进程池中的进程。

示例一:使用多进程计算斐波那契数列

下面的代码演示了如何使用多进程计算斐波那契数列。

import multiprocessing

def fibonacci(num):
    a, b = 0, 1
    for i in range(num):
        a, b = b, a + b
    return a

if __name__ == '__main__':
    pool = multiprocessing.Pool(4)
    results = []

    for i in range(1, 11):
        result = pool.apply_async(fibonacci, args=(i,))
        results.append(result)

    pool.close()
    pool.join()

    for result in results:
        print(result.get())

上述代码使用Pool类创建了一个含有4个进程的进程池,然后使用该进程池计算了1到10位斐波那契数列。运行结果如下:

1
1
2
3
5
8
13
21
34
55

从结果可以看出,斐波那契数列计算是并行执行的,可以有效提高运行效率。

示例二:使用多进程下载图片

下面的代码演示了如何使用多进程下载图片。

import requests
import multiprocessing

def download(url, file_name):
    response = requests.get(url)
    with open(file_name, 'wb') as f:
        f.write(response.content)

if __name__ == '__main__':
    urls = ['https://www.python.org/static/community_logos/python-logo.png',
            'https://www.python.org/static/community_logos/python-powered-w-200x80.png']
    file_names = ['python_logo.png', 'python_powered.png']

    pool = multiprocessing.Pool(2)

    for url, file_name in zip(urls, file_names):
        pool.apply_async(download, args=(url, file_name))

    pool.close()
    pool.join()

    print("Download completed.")

上述代码使用Pool类创建了一个含有2个进程的进程池,然后使用该进程池下载了两张图片。运行结果如下:

Download completed.

从结果可以看出,两张图片是并行下载的,可以有效提高下载速度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python多进程机制实例详解 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • pip报错“OSError: [Errno 13] Permission denied: ‘/usr/local/lib/python3.6/dist-packages/pip/_internal/utils/filesystem.py’”怎么处理?

    原因 “OSError: [Errno 13] Permission denied: ‘/usr/local/lib/python3.6/dist-packages/pip/_internal/utils/filesystem.py'” 错误通常是以下原因引起的: 权限不足:如果您没有足够的权限来访问 pip 相关文件,则可能会出现此错误。 文件损坏:如果 …

    python 2023年5月4日
    00
  • 报错No module named numpy问题的解决办法

    当您在Python项目中使用了numpy库但出现了“Nomodulenamednumpy”错误时,这可能是因为未成功安装numpy库或项目所使用的Python解释器无法找到numpy库。 以下是解决此问题的几种方法: 方法一:检查numpy库是否安装 使用pip命令,确认是否已经成功安装numpy库: pip show numpy 如果没有显示numpy的详…

    python 2023年5月13日
    00
  • Python接口自动化之request请求封装源码分析

    以下是关于Python接口自动化之request请求封装源码分析的攻略: Python接口自动化之request请求封装源码分析 在Python接口自动化中,我们经常需要使用requests库发送Http请求。为了提高代码的复用性和可维护性,我们可以将requests库的请求封装成一个函数或类。以下是Python接口自动化之request请求封装源码分析的攻…

    python 2023年5月15日
    00
  • 如何在Django中使用聚合的实现示例

    在Django中,聚合是用于执行统计计算的功能,例如计算平均值、最大值、最小值、总和等。下面是如何在Django中使用聚合的实现示例的完整攻略。 1.使用annotate()实现聚合 使用Django的annotate()函数可以实现简单的聚合。例如,我们可以使用以下代码统计所有书籍的平均价格: from django.db.models import Av…

    python 2023年5月14日
    00
  • 详解Python搜索元组中的一个元素

    要在Python中搜索元组(tuple)中的一个元素,可以使用以下方法: 使用in关键字:可以使用in关键字判断元素是否存在于元组中,并返回一个布尔值。示例如下: # 创建一个元组 tup = (1, 2, 3, 4, 5) # 使用in判断元素是否存在于元组中 if 3 in tup: print("元素存在于元组中") else: p…

    python-answer 2023年3月25日
    00
  • Python错误+异常+模块总结

    Python错误+异常+模块总结 错误(Errors) Python程序中的错误指的是程序无法执行或出现问题的情况。其中包括语法错误和运行时错误两类。 语法错误 语法错误(Syntax Error)也称为解析错误(Parse Error),是由于程序中的语法不正确而导致的。编译器或解释器在程序解析时无法理解此类错误,且不予执行。通常这类错误会被Python解…

    python 2023年5月13日
    00
  • Python requests.post方法中data与json参数区别详解

    以下是关于Python requests.post方法中data与json参数区别的攻略: Python requests.post方法中data与json参数区别详解 在Python的requests库中,post方法中有两个常用的参数:data和json。这两个参数都可以用来传递POST请求的数据,但是它们的使用方式和传递的数据格式有所不同。以下是Pyt…

    python 2023年5月14日
    00
  • Python time模块详解(常用函数实例讲解,非常好)

    Pythontime模块详解(常用函数实例讲解) 了解time模块 time模块是python标准库中的一个模块,用于处理和表示时间。它提供了各种操作时间和日期的函数,包括获取当前时间、将时间格式化为字符串、获取时间戳、睡眠等待、计算时间差等功能。 常用时间函数 1. 获取当前时间 可以使用time模块的time()函数获取当前系统时间的时间戳,用于记录和计…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部