iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 包之 multiprocessing 多进程
  • 136
分享到

python 包之 multiprocessing 多进程

2024-04-02 19:04:59 136人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、创建一个进程二、创建多个进程三、管道pipe进行进程间通信四、队列Queue进行进程间通信五、进程间同步六、进程间共享数据七、进程池一、创建一个进程 实例化 Process

一、创建一个进程

  • 实例化 Process 类创建一个进程对象
  • 然后调用它的 start 方法即可生成一个子进程
from multiprocessing import Process

def func(s):
print(s)

if __name__ == '__main__':
p = Process(target=func, args=('autofelix', ))
p.start()
p.join()

二、创建多个进程

from multiprocessing import Process

def func(s):
print(s)

if __name__ == '__main__':
process = [
Process(target=func, args=('1', ))
Process(target=func, args=('2', ))
]

[p.start() for p in process]
[p.join() for p in process]

三、管道pipe进行进程间通信

Pipe(duplex=True):表示双工通信,也就是双向的,既可以接受也可以发送数据,默认为True

Pipe(duplex=False):表示单工通信,也就是单向的,只能进行接受或者发送数据

from multiprocessing import Process, Pipe

def func(conn):
print('send a list object ot other side...')
# 从管道对象的一端发送数据对象
conn.send(['33', 44, None])
conn.close()

if __name__ == '__main__':
# 默认创建一个双工管道对象,返回的两个对象代表管道的两端,
# 双工表示两端的对象都可以发送和接收数据,但是需要注意,
# 需要避免多个进程或线程从一端同时读或写数据
parent_conn, child_conn = Pipe()
p = Process(target=func, args=(child_conn, ))
p.start()
# 从管道的另一端接收数据对象
print(parent_conn.recv())
p.join()

四、队列Queue进行进程间通信

  • 当向队列中放入的数据较大时,就会在join()处卡死
  • 为了避免这种情况,常的做法是先使用get()将数据取出来,再使用join()方法
  • 如果不这样处理,队列进程将不能正常终止,造成死情况
from multiprocessing import Process, Queue

def func(q):
  print('put a list object to queue...')
  # 向Queue对象中添加一个对象
  q.put(['33', 44, None])

if __name__ == '__main__':
  # 创建一个队列
  q = Queue()
  p = Process(target=func, args=(q, ))
  p.start()
  # 从Queue对象中获取一个对象
  print(q.get())
  p.join()
-----------------------------------
©著作权归作者所有:来自51CTO博客作者autofelix的原创作品,谢绝转载,否则将追究法律责任
python 包之 multiprocessing 多进程教程
https://blog.51cto.com/autofelix/5166197

五、进程间同步

  • 使用锁保证进程间的同步操作
from multiprocessing import Process, Lock

def func(lc, num):
# 使用锁保证以下代码同一时间只有一个进程在执行
lc.acquire()
print('process num: ', num)
lc.release()

if __name__ == '__main__':
lock = Lock()
for i in range(5):
Process(target=func, args=(lock, i)).start()

六、进程间共享数据

  • 使用共享内存的方式,共享值Value对象和数据Array对象
from multiprocessing import Process, Value, Array

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

if __name__ == '__main__':
# 第一个参数d表示数据类型'double'双精度浮点类型
num = Value('d', 0.0)
# 第一个参数i表示数据类型'integer'整型
arr = Array('i', range(6))
p = Process(target=func, args=(num, arr))
p.start()
p.join()
print(num.value)
print(arr[:])

七、进程池

  • 创建一个 Pool 进程池对象,并执行提交给它的任务
  • 进程池对象允许其中的进程以不同的方式运行
  • 但是需要注意,Pool 对象的方法只能是创建它的进程才能调用
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
# 在进程池中开启一个新的进程并执行 f 函数
result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process
print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow

# map会一直阻塞当前进程直到运行完可迭代对象中的所有元素,并返回结果。
print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]"

# imap是map方法的延迟执行版本,对于比较消耗内存的迭代,建议使用这个方法,
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

result = pool.apply_async(time.sleep, (10,))
print(result.get(timeout=1)) # raises multiprocessing.TimeoutError

到此这篇关于Python 包之 multiprocessing 多进程的文章就介绍到这了,更多相关python   multiprocessing 多进程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python 包之 multiprocessing 多进程

本文链接: https://www.lsjlt.com/news/144875.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 包之 multiprocessing 多进程
    目录一、创建一个进程二、创建多个进程三、管道pipe进行进程间通信四、队列Queue进行进程间通信五、进程间同步六、进程间共享数据七、进程池一、创建一个进程 实例化 Process ...
    99+
    2024-04-02
  • Python多进程multiprocessing包有什么作用
    这篇文章主要讲解了“Python多进程multiprocessing包有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python多进程multiprocessing包有什么作用”吧...
    99+
    2023-06-02
  • Python多进程multiprocessing包有哪些工具
    这篇文章主要介绍“Python多进程multiprocessing包有哪些工具”,在日常操作中,相信很多人在Python多进程multiprocessing包有哪些工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-02
  • Python多进程库multiprocessing有什么作用
    这篇文章主要讲解了“Python多进程库multiprocessing有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python多进程库multiprocessing有什么作用”吧...
    99+
    2023-06-15
  • python多进程multiprocessing的原理和应用
    这篇文章主要介绍“python多进程multiprocessing的原理和应用”,在日常操作中,相信很多人在python多进程multiprocessing的原理和应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-20
  • python之多进程
    一、multiprocessing模块 python中的多线程无法利用多核优势,如果想要充分地使用多核cpu的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。python提供了multiprocessi...
    99+
    2023-01-30
    之多 进程 python
  • 如何在python中使用multiprocessing实现多进程并行计算
    如何在python中使用multiprocessing实现多进程并行计算?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python是什么意思Python是一种跨...
    99+
    2023-06-06
  • python之多进程fork
    一:多进程概念        python中实现多进程是通过os.fork()这个函数来实现,这个函数和操纵系统本身结合的非常紧密,windows下就无法使用os.fork()这个函数。python中的os.fork()被调用后就会立即生成...
    99+
    2023-01-31
    之多 进程 python
  • python之多进程multiproce
    一:multiprocess基本使用    multiprocessing是要比fork更高级的库了,使用multiprocessing可以更加轻松的实现多进程程序。multiprocessing也提供了很多进程同步和进程通信的方法。   ...
    99+
    2023-01-31
    之多 进程 python
  • python之多线程与多进程
    1. 多进程与多线程 (1)背景:为何需要多进程或者多线程:在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任务之间丝毫不会互相干扰。使用多...
    99+
    2023-01-31
    之多 线程 进程
  • python 包之 threading 多线程
    目录一、创建一个线程二、创建多个线程三、线程同步四、递归锁五、信号锁一、创建一个线程 通过实例化threading.Thread类创建线程 import threading def...
    99+
    2024-04-02
  • python并发编程之多进程
    阅读目录 一 multiprocessing模块介绍 二 Process类的介绍 三 Process类的使用 四 守护进程 一  multiprocessing模块介绍  python中的多线程无法利用多核优势,如果想...
    99+
    2023-01-30
    之多 进程 python
  • Python multiprocessing进程间通信方式如何实现
    这篇文章主要介绍“Python multiprocessing进程间通信方式如何实现”,在日常操作中,相信很多人在Python multiprocessing进程间通信方式如何实现问题上存在疑惑,小编查阅了各式资料,整理...
    99+
    2023-07-05
  • Python 多进程使用之监控
    下面简单写下实现方式,具体代码不会全部贴出来。需要使用的py库有下面几个import urllib2 import socket from multiprocessing import Poolurllib2用于请求网页socket用于限制...
    99+
    2023-01-31
    进程 Python
  • python并发执行之多进程
        多进程顾名思义程序启动的时候运行多个进程,每个进程启动一条线程进行程序处理。 没启动一个进程就要单独划分一块内存资源。就像工厂的厂房。为了提高效率每多添加一条生产线就要单独再盖一个厂房。每个厂房相互是独立的。所以启动多进程是很消耗资...
    99+
    2023-01-31
    之多 进程 python
  • Python多进程之进程同步及通信详解
    目录进程同步Lock(锁)进程通信Queue(队列)Pipe(管道)Semaphore(信号量)Event(事件)总结上篇文章介绍了什么是进程、进程与程序的关系、进程的创建与使用、创...
    99+
    2024-04-02
  • python多进程程序打包成exe的问题
    粘贴一下部分的多进程代码 if __name__ == '__main__': """"流程模拟""" multiprocessing.freeze_support(...
    99+
    2022-12-25
    将Python程序打包成exe Python打包exe文件方法汇总 实现python整个项目打包成exe
  • Python进阶之多线程怎么实现
    这篇文章主要介绍“Python进阶之多线程怎么实现”,在日常操作中,相信很多人在Python进阶之多线程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python进阶之多线程怎么实现”的疑惑有所帮助!...
    99+
    2023-07-06
  • python多进程
    第一种开启进程方式#!/usr/bin/python # -*- coding:utf-8 -*- from multiprocessing import Process import time, random, os # print(o...
    99+
    2023-01-31
    进程 python
  • Python 多进程
    #_*_coding:utf-8_*_ __author__ = 'jieli' import time import multiprocessing ''' 线程多锁是不需要当成参数传多,因为线程之间是共享内存多。 但是进程之间多锁...
    99+
    2023-01-31
    进程 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作