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中无限元素列表的实现方法
Aug 18 Python
Python写的服务监控程序实例
Jan 31 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
Python3 模块、包调用&路径详解
Oct 25 Python
python经典趣味24点游戏程序设计
Jul 26 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 Python
keras实现多种分类网络的方式
Jun 11 Python
Python内置函数及功能简介汇总
Oct 13 Python
使用python对excel表格处理的一些小功能
Jan 25 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中的替代语法简介
2014/08/22 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python使用TensorFlow进行图像处理的方法
2018/02/28 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
Python实现点云投影到平面显示
2020/01/18 Python
编写python代码实现简单抽奖器
2020/10/20 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
大学生工作推荐信范文
2013/12/02 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
会计工作态度自我评价
2015/03/06 职场文书
文艺演出主持词
2015/07/01 职场文书
学校教学管理制度
2015/08/06 职场文书
八年级作文之友情
2019/11/25 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL