Python中使用multiprocessing模块创建进程

这篇具有很好参考价值的文章主要介绍了Python中使用multiprocessing模块创建进程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在计算机编程领域,多进程编程是一种常见的并发编程技术,特别适用于利用多核处理器来提高程序性能和并行处理任务。Python作为一种功能强大的编程语言,提供了多种方法来实现多进程编程。其中,multiprocessing模块为我们提供了一种简单而强大的方式来创建和管理进程。本文将深入介绍Python中使用multiprocessing模块创建进程的方法和技巧。

一、multiprocessing模块简介
        multiprocessing模块是Python标准库中的一个内置模块,主要用于实现多进程编程。它提供了创建进程、子进程管理、进程间通信等功能,使得我们可以轻松地编写并发程序。与Python的threading模块相比,multiprocessing模块更适合执行CPU密集型任务,因为它使用多个进程而不是多个线程,并充分利用了多核处理器的优势。

二、创建进程的方法
        使用multiprocessing模块创建进程非常简单。下面是一个基本的示例:

import multiprocessing

def worker():
    print("子进程执行")

if __name__ == '__main__':
    p = multiprocessing.Process(target=worker)
    p.start()
    p.join()
    print("主进程执行")

        在上述示例中,我们首先导入了multiprocessing模块,然后定义了一个名为worker的函数,用于在子进程中执行的任务。在`if __name__ == '__main__':`的条件下,我们创建了一个进程`p`,并将目标函数设为`worker`。最后,我们使用`p.start()`启动子进程,使用`p.join()`等待子进程执行完毕,然后打印出"主进程执行"。运行该程序,你将看到子进程和主进程交替执行的结果。

三、进程间通信
        在实际并发编程中,进程之间的通信是非常重要的。multiprocessing模块提供了多种方法来实现进程间的通信,包括队列、管道、共享内存等。

1. 队列
        队列是一种常见的进程间通信方式,它可以安全地传递数据,使得多个进程之间可以方便地共享信息。以下是使用队列实现进程间通信的示例:

import multiprocessing

def producer(queue):
    for i in range(5):
        queue.put(i)
        print("生产者生产:", i)

def consumer(queue):
    while True:
        item = queue.get()
        if item is None:
            break
        print("消费者消费:", item)

if __name__ == '__main__':
    queue = multiprocessing.Queue()
    p = multiprocessing.Process(target=producer, args=(queue,))
    c = multiprocessing.Process(target=consumer, args=(queue,))
    p.start()
    c.start()
    p.join()
    c.join()

        在上述示例中,我们首先创建了一个队列`queue`,然后定义了一个生产者函数`producer`,用于向队列中放入数据。接着,我们定义了一个消费者函数`consumer`,用于从队列中取出数据并进行处理。在主程序中,我们创建了一个生产者进程`p`和一个消费者进程`c`,并将队列`queue`作为参数传递给它们。最后,我们启动并等待这两个进程执行完毕。运行该程序,你将看到生产者不断向队列中放入数据,而消费者则不断从队列中取出并处理数据。

2. 管道
        管道是另一种常用的进程间通信方式,它提供了一个全双工的通信机制,使得两个进程可以互相发送和接收数据。以下是使用管道实现进程间通信的示例:

import multiprocessing

def sender(conn, messages):
    for message in messages:
        conn.send(message)
        print("发送消息:", message)
    conn.close()

def receiver(conn):
    while True:
        message = conn.recv()
        if message is None:
            break
        print("接收消息:", message)

if __name__ == '__main__':
    parent_conn, child_conn = multiprocessing.Pipe()
    messages = ['Hello', 'World', 'Bye']
    p = multiprocessing.Process(target=sender, args=(child_conn, messages,))
    c = multiprocessing.Process(target=receiver, args=(parent_conn,))
    p.start()
    c.start()
    p.join()
    c.join()

        在上述示例中,我们首先使用`multiprocessing.Pipe()`创建了一对管道`parent_conn`和`child_conn`。然后,我们定义了一个发送者函数`sender`,用于向管道发送消息。接着,我们定义了一个接收者函数`receiver`,用于从管道接收消息。在主程序中,我们创建了一个发送者进程`p`和一个接收者进程`c`,并将管道`child_conn`和`parent_conn`传递给它们。最后,我们启动并等待这两个进程执行完毕。运行该程序,你将看到发送者不断向管道发送消息,而接收者则不断接收并打印出消息。

四、进程池
        在实际并发编程中,我们常常需要创建多个进程来执行任务。然而,频繁地创建和销毁进程会带来较大的开销。为了减少这种开销,我们可以使用multiprocessing模块提供的进程池。以下是使用进程池实现并行任务执行的示例:

import multiprocessing

def worker(task):
    print("执行任务:", task)

if __name__ == '__main__':
    tasks = range(10)
    pool = multiprocessing.Pool()
    pool.map(worker, tasks)
    pool.close()
    pool.join()

        在上述示例中,我们首先定义了一个任务函数`worker`,用于执行具体的任务。在主程序中,我们创建了一个进程池`pool`,然后使用`pool.map()`方法将任务函数`worker`和任务列表`tasks`传递给进程池。进程池会自动分配任务给多个进程来执行,并返回结果。最后,我们使用`pool.close()`关闭进程池,并使用`pool.join()`等待所有进程执行完毕。运行该程序,你将看到任务并行执行的结果。

不知道人工智能如何学习?不知道单片机如何运作?不知道嵌入式究竟是何方神圣?搞不清楚什么是物联网?遇到问题无人可问?来我的绿泡泡交流群吧!里面有丰富的人工智能资料,帮助你自主学习人工智能相关内容,不论是基础的Python教程、OpenCV教程以及机器学习等,都可以在群中找到;单片机毕设项目、单片机从入门到高阶的详细解读、单片机的一系列资料也备好放入群中!关于嵌入式,我这里不仅仅有嵌入式相关书籍的电子版本,更是有丰富的嵌入式学习资料,100G stm32综合项目实战提升包,70G 全网最全嵌入式&物联网资料包,嵌入式面试、笔试的资料,物联网操作系统FreeRTOS课件源码!群内高手云集,各位大佬能够为您排忧解难,让您在学习的过程中如虎添翼!扫码进群即可拥有这一切!还在等什么?赶快拿起手机,加入群聊吧!二维码详情

Python中使用multiprocessing模块创建进程,网络,前端,人工智能,嵌入式,数据库,物联网,单片机文章来源地址https://www.toymoban.com/news/detail-835718.html

到了这里,关于Python中使用multiprocessing模块创建进程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python分享之多进程探索 (multiprocessing包)

    在初步了解Python多进程之后,我们可以继续探索multiprocessing包中更加高级的工具。这些工具可以让我们更加便利地实现多进程。   进程池 进程池 (Process Pool)可以创建多个进程。这些进程就像是随时待命的士兵,准备执行任务(程序)。一个进程池中可以容纳多个待命的士兵。

    2024年02月08日
    浏览(34)
  • Python进程池multiprocessing.Pool八个函数对比

    Python的multiprocessing.Pool类提供了多种方法来分发任务给进程池中的工作进程。这些方法在功能和用途上有所不同,适用于不同的场景。以下是multiprocessing.Pool中八个主要函数的对比 apply() 功能:阻塞地执行一个函数,直到这个函数的执行完成。 用法:apply(func, args=(), kwds={}) 特

    2024年02月04日
    浏览(36)
  • 使用 multiprocessing 多进程处理批量数据

    示例代码 multiprocessing.Pool 创建进程池, 传入的参数是要要使用的 CPU 内核数量, 直接用 cpu_count() 可以拿到当前硬件配置所有的 CPU 内核数. pool.map 可以直接将处理后的结果拼接成一个 list 对象 应用在实际数据处理代码的效果对比: 普通处理方式, 用时 221 秒 多进程处理方式, 用时

    2024年02月09日
    浏览(43)
  • Python 中的 multiprocessing 模块和 threading 模块有什么区别?什么情况下应该使用哪一个?解释 Python 中的 __del__ 方法的作用。有什么需要注意的地方解释

    multiprocessing 模块和 threading 模块都是用于在 Python 中进行并发编程的工具,但它们有一些关键的区别。以下是它们之间的比较: 区别: 并行性 vs 并发性: multiprocessing 模块用于创建独立的进程,每个进程都有自己的 Python 解释器和全局解释器锁(GIL)。因此,multiprocessing 允许

    2024年02月22日
    浏览(44)
  • Python 标准类库-并发执行之multiprocessing-基于进程的并行

    Python3.6 multiprocessing 是一个支持使用类似于线程模块的API派生进程的包。该包同时提供本地和远程并发,通过使用子进程而不是线程,有效地避开了全局解释器锁。因此, multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。它同时在Unix和Windows上运行。 该模块还引

    2024年02月09日
    浏览(34)
  • 由浅入深走进Python异步编程【多进程】(含代码实例讲解 || multiprocessing、异步进程池、进程通信)

    从底层到第三方库,全面讲解python的异步编程。这节讲述的是python的多线程实现,纯干货,无概念,代码实例讲解。 本系列有6章左右,点击头像或者专栏查看更多内容,陆续更新,欢迎关注。 部分资料来源及参考链接: https://www.bilibili.com/video/BV1Li4y1j7RY/ 现在让我们初步进入

    2024年02月03日
    浏览(47)
  • 【神行百里】python开启多线程(threading)与多进程(multiprocessing)运行

      由于处理数据过多,程序运行很慢,就学习了一下python开启多线程与多进程的方法,虽然最后也没用上,但还是记录总结一下,以备不时之需。   传送门:进程与线程认识,进程与线程通俗理解   简言之, 进程为资源分配的最小单元,线程为程序执行的最小单元

    2024年02月02日
    浏览(43)
  • [python]使用标准库logging实现多进程安全的日志模块

    原本应用的日志是全部输出到os的stdout,也就是控制台输出。因其它团队要求也要保留日志文件,便于他们用其他工具统一采集,另一方面还要保留控制台输出,便于出问题的时候自己直接看pod日志。具体需求如下: 日志支持同时控制台输出和文件输出 控制台的输出级别可以

    2024年01月23日
    浏览(37)
  • python multiprocessing库使用记录

    需求是想并行调用形式化分析工具proverif,同时发起对多个query的分析(378个)。实验室有40核心80线程的服务器(双cpu,至强gold 5218R*2)。 观察到单个命令在分析时内存占用不大,且只使用单核心执行,因此考虑同时调用多个命令同时执行分析,加快结果输出。 最底层的逻辑

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包