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求素数示例分享
Feb 16 Python
Python 的类、继承和多态详解
Jul 16 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
python实现拓扑排序的基本教程
Mar 11 Python
Python iter()函数用法实例分析
Mar 17 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
python flask搭建web应用教程
Nov 19 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
解决python Jupyter不能导入外部包问题
Apr 15 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 COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
PHP模拟asp中response类实现方法
2015/08/08 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
node.js适合游戏后台开发吗?
2014/09/03 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
Python 变量类型及命名规则介绍
2013/06/08 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
Python实现的堆排序算法示例
2018/04/29 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
使用python实现kNN分类算法
2019/10/16 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
string = null 和string = ''的区别
2013/04/28 面试题
列车长先进事迹材料
2014/01/25 职场文书
内勤主管岗位职责
2014/04/03 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python