高效的python——多进程

系列文章目录

例如:第一章多进程数据处理




一、子进程(Process类)

调用process来对函数进行封装,可以根据需求对多个函数进程封装调用,

代码如下:

from multiprocessing import Process

def f(name):
    print('hello', name)

if __name__ == '__main__':
    #调用子子进程来处理函数
    p1 = Process(target=f, args=('bob',))
    p2 = Process(target=f, args=('pop',))
    #开始进程
    p1.start()
    p2.start()
    #终止进程
    p1.join()
    p2.join()

详细的参数介绍

二、Pool类

Pool 对象,可以赋予函数并行化处理一系列输入值的能力,可以将输入数据分配给不同进程处理(数据并行),Pool实现多进程的函数有apply(), apply_async(), map(), imap();帮助文档

1.调用方式

代码如下:

from multiprocessing import Pool
import time

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(processes=4) as pool:         # start 4 worker processes
        # 利用多进程对函数进行封装,
        #函数只会在一个进程池中的一个工作进程中执行,
        #不支持迭代对象(ite)的输入
        # apply_async(func[, args[, kwds[, callback[, error_callback]]]]),返回一个pool.ApplyResult对象
        result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process,必须要加逗号,对应函数的输入函数
        # prints "100" unless your computer is *very* slow
        print(result.get())  


        # [map(func, iterable[, chunksize])]
        # 但它只支持一个 iterable 参数,这个方法会将可迭代对象分割为许多块,然后提交给进程池
        # 返回可迭代对象,如下输出的是一个列表
        print(pool.map(f, range(10)))       # prints "[0, 1, 4,..., 81]"
        # 对于多个可迭代对象,返回一个IMAPiterate;调用next()得到相应的值
        it = pool.imap(f, range(10))
        print(next(it))                     # prints "0"
        print(next(it))                     # prints "1"
        print(it.next(timeout=1))           # prints "4" unless your computer is *very* slow

    # 利用lamda表达式遍历列表调用多进程操作
    pool = Pool(3)
    results = [pool.apply_async(f, args=(num,)) for num in [1,2,3,4,5]]
    # 返回一个多进程列表
    results = [p.get() for p in results]
    print(results)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云朵不吃雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值