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简单实现子网掩码转换的方法
Apr 13 Python
详解配置Django的Celery异步之路踩坑
Nov 25 Python
Python闭包思想与用法浅析
Dec 27 Python
Python中如何导入类示例详解
Apr 17 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
python tkinter canvas使用实例
Nov 04 Python
python 初始化一个定长的数组实例
Dec 02 Python
Pytorch to(device)用法
Jan 08 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
Python用Jira库来操作Jira
Dec 28 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
php Smarty 字符比较代码
2011/02/27 PHP
PHP header函数分析详解
2011/08/06 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
python画折线图的程序
2018/07/26 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
web页面录屏实现
2019/02/12 HTML / CSS
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
类和结构的区别
2012/08/15 面试题
优秀教师先进事迹
2014/01/22 职场文书
大学军训感言400字
2014/03/11 职场文书
兴趣小组活动总结
2014/05/05 职场文书
岗位明星事迹材料
2014/05/18 职场文书
党的作风建设心得体会
2014/10/22 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
服务行业标语口号
2015/12/26 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python