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 相关文章推荐
用C++封装MySQL的API的教程
May 06 Python
详解Django中的权限和组以及消息
Jul 23 Python
Python函数式编程
Jul 20 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
Python 远程开关机的方法
Nov 18 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上传文件,创建递归目录的实例代码
2013/10/18 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python中logging模块的用法实例
2014/09/29 Python
python分析网页上所有超链接的方法
2015/05/08 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
python实现简单俄罗斯方块
2020/03/13 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
幼儿教师研修感言
2014/02/12 职场文书
读书活动实施方案
2014/03/10 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书