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创建和删除目录的方法
Apr 29 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Python3中的json模块使用详解
May 05 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
Python字典的核心底层原理讲解
Jan 24 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
django的autoreload机制实现
Jun 03 Python
90行Python代码开发个人云盘应用
Apr 20 Python
方法汇总:Python 安装第三方库常用
Apr 26 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
PHP邮件专题
2006/10/09 PHP
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
Python中的CSV文件使用"with"语句的方式详解
2018/10/16 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
运动会表扬稿大全
2014/01/16 职场文书
《乌塔》教学反思
2014/02/17 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书