本篇文章给大家带来的内容是关于python多进程的用法示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势。

针对计算密集型场景需要使用多进程,python的multiprocessing与threading模块非常相似,支持用进程池的方式批量创建子进程。创建单个Process进程(使用func)

只需要实例化Process类,传递函数给target参数,这点和threading模块非常的类似,args为函数的参数

import os

from multiprocessing import Process

# 子进程要执行的代码

def task(name):

print('run child process %s (%s)...' % (name, os.getpid()))

if __name__ == '__main__':

print('parent process %s.' % os.getpid())

p = Process(target=task, args=('test',))

p.start()

p.join()

print('process end.')

创建单个Process进程(使用class)

继承Process类,重写run方法创建进程,这点和threading模块基本一样

import multiprocessing

import os

from multiprocessing import current_process

class Worker(multiprocessing.Process):

def run(self):

name = current_process().name # 获取当前进程的名称

print('run child process (%s)' % (name, os.getpid()))

print('In %s' % self.name)

return

if __name__ == '__main__':

print('parent process %s.' % os.getpid())

p = Worker()

p.start()

p.join()

print('process end.')

* 停止进程

terminate()结束子进程,但是会导致子进程的资源无法释放掉,是不推荐的做法,因为结束的时候不清楚子线程的运行状况,有很大可能性导致子线程在不恰当的时刻被结束。

import multiprocessing

import time

def worker():

print('starting worker')

time.sleep(0.1)

print('finished worker')

if __name__ == '__main__':

p = multiprocessing.Process(target=worker)

print('执行前:', p.is_alive())

p.start()

print('执行中:', p.is_alive())

p.terminate() # 发送停止号

print('停止:', p.is_alive())

p.join()

print('等待完成:', p.is_alive())

直接创建多个Process进程

import multiprocessing

def worker(num):

print(f'Worker:%s %s', num)

return

if __name__ == '__main__':

jobs = []

for i in range(5):

p = multiprocessing.Process(target=worker, args=(i,))

jobs.append(p)

p.start()

使用进程池创建多个进程

在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上千个目标,手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。

Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。

import os

import random

import time

from multiprocessing import Pool

from time import ctime

def task(name):

print('start task %s (%s)...' % (name, os.getpid()))

start = time.time()

time.sleep(random.random() * 3)

print('end task %s runs %0.2f seconds.' % (name, (time.time() - start)))

if __name__ == '__main__':

print('parent process %s.' % os.getpid())

p = Pool() # 初始化进程池

for i in range(5):

p.apply_async(task, args=(i,)) # 追加任务 apply_async 是异步非阻塞的,就是不用等待当前进程执行完毕,随时根据系统调度来进行进程切换。

p.close()

p.join() # 等待所有结果执行完毕,会等待所有子进程执行完毕,调用join()之前必须先调用close()

print(f'all done at: {ctime()}')

如果关心每个进程的执行结果,可以使用返回结果的get方法获取,代码如下

import os

import random

import time

from multiprocessing import Pool, current_process

from time import ctime

def task(name):

print('start task %s (%s)...' % (name, os.getpid()))

start = time.time()

time.sleep(random.random() * 3)

print('end task %s runs %0.2f seconds.' % (name, (time.time() - start)))

return current_process().name + 'done'

if __name__ == '__main__':

print('parent process %s.' % os.getpid())

result = []

p = Pool() # 初始化进程池

for i in range(5):

result.append(p.apply_async(task, args=(i,))) # 追加任务 apply_async 是异步非阻塞的,就是不用等待当前进程执行完毕,随时根据系统调度来进行进程切换。

p.close()

p.join() # 等待所有结果执行完毕

for res in result:

print(res.get()) # get()函数得出每个返回结果的值

print(f'all done at: {ctime()}')

python PHP 多进程,python多进程的用法示例(代码)相关推荐

  1. python中的随机函数random的用法示例

    这篇文章主要介绍了python中的随机函数random的用法示例,详细的介绍了python 随机函数random的用法和示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.random模块简介 ...

  2. python广告刷量_用python实现刷点击率的示例代码

    背景 同事的老爸参加微信的一个活动,需要刷点击率,因此,写了一个程序助之. 准备 微信活动也是有真实地址的. 通过mitmproxy(man in the middle proxy)的方式,可以获取微 ...

  3. html渐变线条代码,CSS3实现线性渐变用法示例代码详解

    前言 演示下太老版本浏览器的渐变实现了[IE9-]; IE9以前,渐变都是通过滤镜实现的,大体的写法就是这样; .testDiv { width:400px; height:400px; border ...

  4. 用python做一个购物车编程_利用python实现简单的循环购物车功能示例代码

    本文主要给大家介绍了关于python实现循环购物车功能的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 示例代码 # -*- coding: utf-8 -*- __author__ = ...

  5. python中实现延时回调普通函数示例代码

    这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. 回调函 ...

  6. 毕业生简单的用Python实现一个信息管理系统【含示例代码】

    写在前面: 从昨晚的梦里回忆起数据管理的作业: 实现一个自己的选题---- 毕业生信息管理系统,实现学生个人信息基本的增删改查, 我想了想前段时间刚学习的列表,这个简单啊 ,设计一个学生信息列表,然后 ...

  7. 《Think Python》练习 4-1:本章示例代码栈图、停止点偏离思考

    第4章 案例研究:接口设计 练习 4-1 本章示例代码栈图.停止点偏离思考 [习题 4.1.1] 画一个栈图来显示函数 circle(bob, radius) 运行时的程序状态. <Think ...

  8. linux 切换python版本_Linux下python默认版本切换成替代版本(示例代码)

    当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件.你可以按照以下方法使用 ls 命令来查看你的系 ...

  9. Java中File类中getAbsolutePath、getPath​、getName、length普通方法用法示例代码

    File类中getAbsolutePath.getPath​.getName.length普通方法用法示例 总概述:         String getAbsolutePath​() 返回此抽象路径 ...

  10. python iloc iat_Python Pandas Dataframe.iat[ ]用法及代码示例

    Python是进行数据分析的一种出色语言,主要是因为以数据为中心的Python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas iat []方法用于返回数 ...

最新文章

  1. 推荐系统正成为所有领域的一种标配
  2. Linux命令操作,文件复制,删除修改等
  3. python matlabplot animate 刷新_matlab动态绘图Animation
  4. uva 816(经典bfs例子)
  5. 密位测距离口诀_电气故障怎么查?最新最全的79条电气故障诊断口诀
  6. 听说现在都考这些React面试题
  7. 如何在ASP.NET Core程序启动时运行异步任务(1)
  8. 上位机软件控制下位机PHP,采用stm32f103CB硬件I2C1/2(自制硬件)中断/DMA访问,四轴开源程序,DMP,PCB外框图纸库文件,USBToVCOM代码下位机...
  9. 【Java】对JTable里的元素进行排序
  10. CS231n李飞飞计算机视觉 神经网络训练细节part2上
  11. c语言使用gotoxy函数清屏,写了个小程序,一直会闪屏,用的gotoxy函数,求大神教...
  12. 三大运营商发5G白皮书:传统短信迎大升级 推出5G消息
  13. c#中嵌入echarts_如何利用 C# + Echarts 绘制 Bar Simple
  14. 产品经理素质能力模型
  15. python打包加密工具:Pyinstaller和Nuitka
  16. 表单验证工具类ValidationUtils
  17. (精华)2020年10月7日 高并发高可用 Redis实现异步架构
  18. A/Btest小项目实操
  19. veracrypt 创建文件型加密卷
  20. pdf实现页眉或者页脚代码

热门文章

  1. codeforce303C-Minimum Modular-剪枝,暴力
  2. fastdfs-client-java操作fastdfs
  3. winform公共标签和常用属性
  4. 汇编语言---内存变量的地址
  5. android之Handler Runnable实现倒计时
  6. JavaSE语法基础总结
  7. 小网站架构优化-提升抗并发能力:子应用程序分离方案
  8. XHTML + CSS使用技巧
  9. 软考信息系统项目管理师_信息系统安全管理---软考高级之信息系统项目管理师026
  10. 人工智能_TensorFlow工作笔记003---在pycharm中安装TensorFlow