python进程的状态、创建及使用方法详解


Posted in Python onDecember 06, 2019

本文实例讲述了python进程的状态、创建及使用方法。分享给大家供大家参考,具体如下:

进程以及状态

1. 进程

程序:例如xxx.py这是程序,是一个静态的

进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。

不仅可以通过线程完成多任务,进程也是可以的

2. 进程的状态

工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态

  • 就绪态:运行的条件都已经慢去,正在等在cpu执行
  • 执行态:cpu正在执行其功能
  • 等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态

进程的创建-multiprocessing

multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情

1. 2个while循环一起执行

# -*- coding:utf-8 -*-
from multiprocessing import Process
import time
def run_proc():
  """子进程要执行的代码"""
  while True:
    print("----2----")
    time.sleep(1)
if __name__=='__main__':
  p = Process(target=run_proc)
  p.start()
  while True:
    print("----1----")
    time.sleep(1)

说明

  • 创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动

2. 进程pid

# -*- coding:utf-8 -*-
from multiprocessing import Process
import os
import time
def run_proc():
  """子进程要执行的代码"""
  print('子进程运行中,pid=%d...' % os.getpid()) # os.getpid获取当前进程的进程号
  print('子进程将要结束...')
if __name__ == '__main__':
  print('父进程pid: %d' % os.getpid()) # os.getpid获取当前进程的进程号
  p = Process(target=run_proc)
  p.start()

3. Process语法结构如下:

Process([group [, target [, name [, args [, kwargs]]]]])

  • target:如果传递了函数的引用,可以任务这个子进程就执行这里的代码
  • args:给target指定的函数传递的参数,以元组的方式传递
  • kwargs:给target指定的函数传递命名参数
  • name:给进程设定一个名字,可以不设定
  • group:指定进程组,大多数情况下用不到

Process创建的实例对象的常用方法:

  • start():启动子进程实例(创建子进程)
  • is_alive():判断进程子进程是否还在活着
  • join([timeout]):是否等待子进程执行结束,或等待多少秒
  • terminate():不管任务是否完成,立即终止子进程

Process创建的实例对象的常用属性:

  • name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
  • pid:当前进程的pid(进程号)

4. 给子进程指定的函数传递参数

# -*- coding:utf-8 -*-
from multiprocessing import Process
import os
from time import sleep
def run_proc(name, age, **kwargs):
  for i in range(10):
    print('子进程运行中,name= %s,age=%d ,pid=%d...' % (name, age, os.getpid()))
    print(kwargs)
    sleep(0.2)
if __name__=='__main__':
  p = Process(target=run_proc, args=('test',18), kwargs={"m":20})
  p.start()
  sleep(1) # 1秒中之后,立即结束子进程
  p.terminate()
  p.join()

运行结果:

子进程运行中,name= test,age=18 ,pid=45097...
{'m': 20}
子进程运行中,name= test,age=18 ,pid=45097...
{'m': 20}
子进程运行中,name= test,age=18 ,pid=45097...
{'m': 20}
子进程运行中,name= test,age=18 ,pid=45097...
{'m': 20}
子进程运行中,name= test,age=18 ,pid=45097...
{'m': 20}

5. 进程间不同享全局变量

# -*- coding:utf-8 -*-
from multiprocessing import Process
import os
import time
nums = [11, 22]
def work1():
  """子进程要执行的代码"""
  print("in process1 pid=%d ,nums=%s" % (os.getpid(), nums))
  for i in range(3):
    nums.append(i)
    time.sleep(1)
    print("in process1 pid=%d ,nums=%s" % (os.getpid(), nums))
def work2():
  """子进程要执行的代码"""
  print("in process2 pid=%d ,nums=%s" % (os.getpid(), nums))
if __name__ == '__main__':
  p1 = Process(target=work1)
  p1.start()
  p1.join()
  p2 = Process(target=work2)
  p2.start()

运行结果:

in process1 pid=11349 ,nums=[11, 22]
in process1 pid=11349 ,nums=[11, 22, 0]
in process1 pid=11349 ,nums=[11, 22, 0, 1]
in process1 pid=11349 ,nums=[11, 22, 0, 1, 2]
in process2 pid=11350 ,nums=[11, 22]

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
谈谈Python进行验证码识别的一些想法
Jan 25 Python
Python中 Lambda表达式全面解析
Nov 28 Python
Python基于回溯法子集树模板解决m着色问题示例
Sep 07 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
pandas DataFrame数据转为list的方法
Apr 11 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
python 三元运算符使用解析
Sep 16 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
Python计算信息熵实例
Jun 18 Python
Python字典dict常用方法函数实例
Nov 09 Python
Django Form and ModelForm的区别与使用
Dec 06 #Python
python 实现二维字典的键值合并等函数
Dec 06 #Python
python二分法查找算法实现方法【递归与非递归】
Dec 06 #Python
python二维键值数组生成转json的例子
Dec 06 #Python
python加载自定义词典实例
Dec 06 #Python
Python 词典(Dict) 加载与保存示例
Dec 06 #Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 #Python
You might like
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
使用PHP和XSL stylesheets转换XML文档
2006/10/09 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
PHP可变函数的使用详解
2013/06/14 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
jQuery Mobile 和 Kendo UI 的比较
2016/05/05 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
jQuery validata插件实现方法
2017/06/25 jQuery
React学习笔记之条件渲染(一)
2017/07/02 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
python 爬虫请求模块requests详解
2020/12/04 Python
MYSQL基础面试题
2012/05/13 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
经济与贸易专业应届生求职信
2013/11/19 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书