使用python创建进程

from multiprocessing import Process		# 导入进程模块
import time # 定义一个函数,测试创建进程使用
def task(name):
print(name, '我是一个进程')
time.sleep(3)
print(name, '我现在运行完成啦') # 执行进程,在windows中必须使用这种方法调用,否则会出现循环导入的情况,最终导致报错。
if __name__ == '__main__':
process1 = Process(target=task, args=('子进程1号说>>>:',)) # 1
process1.start() # 2
print('我是主进程') # 3 '''
返回结果:
我是主进程
子进程1号说>>>: 我是一个进程
子进程1号说>>>: 我现在运行完成啦
整个main里面的执行过程说明:
1.创建一个进程对象
2.启动进程,告诉操作系统创建一个新的进程 并在该进程中执行task函数(异步)
3.打印“我是主进程”字符串(同步)
4.执行进程内部的函数体代码
'''

进程间的数据隔离

# 同一台计算机之间的多个进程数据是严格意义上的物理隔离的(在默认情况下)
# 测试代码如下:
from multiprocessing import Process
import time money = 1000 def task():
global money
money = 666
print('我是子进程task,我在查看变量money>>>:', money) if __name__ == '__main__':
print('函数执行前>>>:', money)
task()
print('函数执行后>>>:', money)
# 正常执行完以后,money变量被函数中的变量修改,最后变为666
'''
函数执行前>>>: 1000
我是子进程task,我在查看变量money>>>: 666
函数执行后>>>: 666
''' # 如果我们把上面的执行过程换成进程执行:
if __name__ == '__main__':
process1 = Process(target=task, )
process1.start()
time.sleep(3)
print(money) # 看输出结果可以看到,这里并未被函数中的变量修改
'''
此时的函数返回值:
我是子进程task,我在查看变量money>>>: 666
1000 这里就说明了什么是进程间的数据隔离
'''

进程join方法

from multiprocessing import Process
import time def task(name, n=3):
print('%s is running' % name)
time.sleep(n)
print('%s is over' % name) if __name__ == '__main__':
process1 = Process(target=task, args=('子进程1号>>>:', 1))
process2 = Process(target=task, args=('子进程2号>>>:', 2))
process3 = Process(target=task, args=('子进程3号>>>:', 3))
start_time = time.time()
process1.start()
process2.start()
process3.start()
process1.join()
process2.join()
process3.join()
print('我是主进程')
print('我的执行时间>>>:', time.time() - start_time)
'''
返回值:
子进程1号>>>: is running # 进程1号占用时间1秒
子进程2号>>>: is running # 进程2号占用时间2秒
子进程3号>>>: is running # 进程3号占用时间3秒
子进程1号>>>: is over
子进程2号>>>: is over
子进程3号>>>: is over
我是主进程
我的执行时间>>>: 3.185295581817627 # 三个进程执行时间为3秒出头 结论:
1. 三个子进程执行完成以后,主进程才执行。
2. 三个进程并非是执行完一个再执行下一个,都是先创建好并执行函数体代码,但返回值的时候,是一个一个返回。
'''

进程间通信的方法

'''
根据之前的实验得知,进程间严格意义上说是不能通信的(默认),但是也有方法可以通信(或者说传递数据),那就是使用消息队列,进程将产生的数据放到消息队列中,其他进程再去消息队列中取。
下面初步介绍一下Queue的简单用法:
''' from multiprocessing import Queue
# 消息队列模块(复习:队列是先进先出,堆栈是先进后出) # 1. 指定存放数据的个数
q = Queue(3)
# 2. 向消息队列中存放数据
q.put('我是第一个')
# 3. 可以判断队列是否已满
print(q.full()) # 返回False
# 4. 继续向队列中存放数据
q.put('我是第二个')
q.put('我是第三个')
print(q.full()) # 返回True
# 5. 因为在创建对象的时候指定的队列只能存放3个数据,所以再存放第四个的时候会出现等待现象。
# 6. 等待现象什么时候会结束?当有一个数据被取走的时候就对结束等待,将后面的数放入队列中。
# 7. 判断队列是否为空
print(q.empty()) # 返回False

查看进程的多种方法

from multiprocessing import Process, current_process
import os def task():
print(current_process()) # <Process name='Process-1' parent=39140 started> (可以看到它的父进程号是39140)
print(current_process().pid) # 34064 # 当前进程的进程号(这个是子进程) # 1.查看进程
if __name__ == '__main__':
p1 = Process(target=task)
p1.start()
print(current_process()) # <_MainProcess name='MainProcess' parent=None started>
print(current_process().pid) # 39140 当前进程的进程号(这个是主进程)
print(os.getpid()) # 39140 查看此进程的进程号
print(os.getppid()) # 35544 查看父进程的进程号 (getppid 第一个p就是parent) # # 2. 终止进程
#
# if __name__ == '__main__':
# p1 = Process(target=task)
# p1.start()
# p1.terminate() # 终止进程
#
# # 3. 判断进程是否存活
# if __name__ == '__main__':
# p1 = Process(target=task)
# p1.start()
# p1.terminate() # 终止进程
# p1.is_alive()
#
# # 4. 创建守护进程
# if __name__ == '__main__':
# p1 = Process(target=task)
# p1.daemon = True # 此时p1的父进程结束,p1不管是否运行完都会结束
# p1.start()

Python之进程管理的更多相关文章

  1. Python—守护进程管理工具(Supervisor)

    一.前言简介 1.Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程.可以很方便的用来启动.重启.关闭进程(不仅仅是 ...

  2. Python 进程管理工具 Supervisor 使用教程

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...

  3. 进程管理工具supervisor

    1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. supervisord负责读入配置文件,然后supervisor ...

  4. 【Python】使用Supervisor来管理Python的进程

    来源 : http://blog.csdn.net/xiaoguaihai/article/details/44750073     1.问题描述 需要一个python的服务程序在后台一直运行,不能让 ...

  5. Python::OS 模块 -- 进程管理

    os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...

  6. supervisor python开发的进程管理工具

    Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...

  7. python 标准类库-并行执行之subprocess-子进程管理

    标准类库-并行执行之subprocess-子进程管理 by:授客QQ:1033553122 1.使用subprocess模块 以下函数是调用子进程的推荐方法,所有使用场景它们都能处理.也可用Popen ...

  8. supervisor - Python进程管理工具(转)

    add by zhj: 下面是在ubuntu上的一些使用经验 1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. s ...

  9. python之supervisor进程管理工具

    supervisor是python写的一个管理进程运行的工具,可以很方便的监听.启动.停止.重启一个或多个进程:有了supervisor后,就不用字节写启动和监听的shell脚本了,非常方便. sup ...

  10. supervisor - Python进程管理工具

    经常会碰到要写一些守护进程,简单做法放入后台: shell> nohup python xxx.py & 偶尔这么做还可以接受,如果一堆这样的呢? 当然还有一个问题,就是各种服务,对应的 ...

随机推荐

  1. Java中接口相关知识

    1.接口 1.1接口概述 接口就是一种公共的规范标准,只要符合标准,大家都可以通用 Java中的接口更多的体现在对行为的抽象 1.2接口的特点 接口用关键字interface修饰,格式:public ...

  2. Java实现图片上传返回上传地址

    **关于在实际开发中最常用也是用的最多的Java实现文档.图片上传.***一.准备阶段*文档.图片上传有几种方式,包括传统的ajax上传,云上传,这里给大家实现通过代码将图片上传至七牛云服务器并返回图 ...

  3. oracle中的merge into用法解析

    一:merge into的形式 MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] a ...

  4. RKO组——冲刺随笔(3)

    这个作业属于哪个课程 至诚软工实践F班 这个作业要求在哪里 第五次团队作业:项目冲刺 这个作业的目标 记录冲刺计划.要求包括当天会议照片.会议内容以及项目燃尽图(项目进度) 1.昨日进展 对上一次讨论 ...

  5. CentOS 7(Linux)安装Docker

    CentOS 7(Linux)安装Docker 一.分别执行下列命令添加并更新yum源 yum update yum install epel-release -y yum clean all yum ...

  6. yapi的一些基本操作

    一.yapi能干什么 强大的接口管理平台 提供mock功能 提供测试功能 项目管理功能 插件齐全 二.yapi的权限 项目权限 操作 游客 项目开发者 项目组长 超级管理员 浏览公开项目与接口 √ √ ...

  7. Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

    错误原因 在pom中引入了mybatis-spring-boot-starter ,Spring boot默认会加载org.springframework.boot.autoconfigure.jdb ...

  8. MSVC设置版本

    MSVC设置版本 在开发QT时,由于QT 5.12与MSVC 2017兼容,因此需要用MSVC 2017来编译使用QT 5.12的程序. 1 安装MSVC 2017 由于笔者电脑上安装的Visual ...

  9. TAP 交换机

    首发第一篇,就想分享一下TAP交换机的网络设备,为啥要谈这个呢,因为是一个冷门产品,大厂一般都没有,有也不作为重点产品推介,所以关注的人少,希望能给有这方面需求的人,又苦于找不到介绍资料的人以帮助.在 ...

  10. 如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3)

    如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3) superrace• 18-06-12 作者简介:史梦晨,曾就职于国内金牌集成商, 现就职于EANTC( 欧洲高级网络 ...