栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python--多进程使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python--多进程使用

概念
from multiprocessing import Process

1、进程常用方法

p = Process(target=函数名,args=参数, name=进程名)
#创建进程对象,执行任务 a
p.start() 
#启动多进程
os.getpid()
#获取当前的进程id号
os.getppid()
#获取进程的父进程id号
multiprocessing.current_process().name
#获取当前进程名称

2、要点

        默认主进程的结束不会影响子进程

3、join方法

        阻塞当前进程, 直到调用join方法的那个进程执行完毕,才会向下执行(主进程等待子进程)

4、主进程一般负责任务的调度,不负责业务的调度

5、全局变量共享问题

        全局变量在多个子进程中是不能共享的,在创建子进程时,对全局变量进程了备份,主进程中的全局变量和子进程中的全局变量不是同一个

6、进程池概念

from multiprocessing import Pool

实例化开启并发数

        Pool([参数])

参数:开启并发数 默认是计算机的内核数

获取核心数   : multiprocessing.cpu_count()

创建子进程,放在内存池中进行管理

        apply_async()         非阻塞模式 并发(异步)

        apply()        阻塞模式(一个一个执行,同步)

在join之前,需要先关闭进程池,调用close以后,就不能在向进程池添加进程了

from multiprocessing import Process
from multiprocessing import Pool
import multiprocessing
import time

def fun(i):
    print('子进程开始',i)
    print('cpu核心数', multiprocessing.cpu_count())
    time.sleep(1)
    print('子进程结束')

if __name__ == '__main__':
    p = Pool(8)
    for i in range(8):
        p.apply_async(fun, args=(i,))
    p.close()
    p.join()
    print('over')

7、进程池map方法

        概述:如果你有一堆数据要进行处理每个数据都要传递给当前的函数那么map就非常函数前提是一个可以迭代的对象

        参数1  函数名

        参数2  迭代对象

8、回调函数的使用

from multiprocessing import Pool

def myCallBack(x):
    with open('./test.txt', 'a+') as f:
        f.write(str(x))

def test(i):
    return i

if __name__ == '__main__':
    p = Pool()

    for i in range(10):
        p.apply_async(test, args=(i, ), callback=myCallBack)
    p.close()
    p.join()
    print('over')

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004618.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号