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实现QQ游戏大家来找茬辅助工具
Sep 14 Python
Python如何快速实现分布式任务
Jul 06 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
Python中调用其他程序的方式详解
Aug 06 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
python db类用法说明
Jul 07 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 Python
Flask response响应的具体使用
Jul 15 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 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简单实现合并2个数字键数组值的方法
2017/05/30 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
详解Python中dict与set的使用
2015/08/10 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Django  ORM 练习题及答案
2019/07/19 Python
django如何实现视图重定向
2019/07/24 Python
python自动生成model文件过程详解
2019/11/02 Python
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
JAVA代码查错题
2014/10/10 面试题
学生学习总结的自我评价
2013/10/22 职场文书
办公室内勤岗位职责范本
2013/12/09 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
2015元旦标语横幅
2014/12/09 职场文书
数学教师求职信范文
2015/03/20 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
关于感恩的作文
2019/08/26 职场文书