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 del()函数用法
Mar 24 Python
一个超级简单的python web程序
Sep 11 Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
python检测远程udp端口是否打开的方法
Mar 14 Python
python使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
关于Python 3中print函数的换行详解
Aug 08 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
python爬取各类文档方法归类汇总
Mar 22 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
python图形用户接口实例详解
Dec 16 Python
浅谈tensorflow 中tf.concat()的使用
Feb 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
PHP中,文件上传
2006/12/06 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
php实现快速排序的三种方法分享
2014/03/12 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
javascript类型转换示例
2014/04/29 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
用python实现刷点击率的示例代码
2019/02/21 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
python 常见的反爬虫策略
2020/09/27 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
群众路线四风问题整改措施
2014/09/27 职场文书
工人先进事迹材料
2014/12/26 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
python中的被动信息搜集
2021/04/29 Python
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技