Python学习笔记之Multiprocessing

Python在处理多进程也做的很好,其提供了Multiprocessing来处理进程,就像处理线程一样,此模块包含了一个与Thread类非常类似的Process类,可以在任何平台上使用

1. 源码Process

from multiprocessing import Process
import os

def work(identifier):
    print('xsophiax, i am a process {}, pid: {}.'.format(identifier, os.getpid()))


def main():
    processes = [
        Process(target=work, args=(number,))
        for number in range(5)
    ]

    for process in processes:
        process.start()

    while processes:
        processes.pop().join()


if __name__ == '__main__':
    main()

输出结果:

xsophiax, i am a process 3, pid: 10148.
xsophiax, i am a process 1, pid: 9244.
xsophiax, i am a process 0, pid: 9900.
xsophiax, i am a process 2, pid: 8292.
xsophiax, i am a process 4, pid: 5840.

2. 源码Pipe

from multiprocessing import Process, Pipe


class CustomClass:
    def __init__(self):
        print('CustomClass.__init__')


def work(connection):
    while True:
        instance = connection.recv()
        if instance:
            print("CHLD: recv {}".format(instance))
        else:
            return


def main():
    parent_conn, child_conn = Pipe()

    child = Process(target=work, args=(child_conn,))

    for item in (
        42,
        'some thing',
        {'one': 1},
        CustomClass(),
        None
    ):
        print("PRNT: Send {}:".format(item))
        parent_conn.send(item)


    child.start()
    child.join()

if __name__ == '__main__':
    main()

输出结果:

CustomClass.__init__
PRNT: Send 42:
PRNT: Send some thing:
PRNT: Send {'one': 1}:
PRNT: Send <__main__.CustomClass object at 0x00000000026F7D68>:
PRNT: Send None:
CHLD: recv 42
CHLD: recv some thing
CHLD: recv {'one': 1}
CHLD: recv <__mp_main__.CustomClass object at 0x00000000026A7EF0>

细心的同学能看到传递的自定义类示例其具有不同的地址,具体决定于进程;

3. 源码sharedctypes

from multiprocessing import Process, Value, Array

def f(n, a):
    n.value = 3.1415927
    for i in range(len(a)):
        a[i] = -a[i]

def main():
    num = Value('d', 0.0)
    arr = Array('i', range(10))

    p = Process(target=f, args=(num, arr))
    p.start()
    p.join()

    print(num.value)
    print(arr[:])

if __name__ == '__main__':
    main()

输出结果

3.1415927
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

使用multiprocessing.sharedctypes时,您需要记住,正在使用的共享内存,因此为了避免数据顺坏的风险,你需要使用类似锁定原语。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的threading模块和multiprocessing模块是实现并发编程的两种常用方式。引用中提到了Python中常使用的线程模块有thread(低版本使用的),threading,queue和multiprocessing threading。而引用则指出了三种主流的Python并发编程方式,即多进程multiprocessing,多线程threading和协程asyncio。在并发编程中,可以根据具体需求选择适合的方式来实现并发操作。引用给出了关于Python threadingmultiprocessing模块的基本用法和注意事项的详细介绍,可以作为参考。所以,Python中的threadingmultiprocessing模块都是实现并发编程的常用工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python 多线程 threadingmultiprocessing模块](https://blog.csdn.net/SeeTheWorld518/article/details/49639885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [PYTHON 多进程multiprocessing、多线程Threading、多协程asyncio学习笔记(未完结)](https://blog.csdn.net/qq_37373209/article/details/121229162)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python threadingmultiprocessing模块基本用法实例分析](https://download.csdn.net/download/weixin_38552083/12861249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值