在类unix操作系统下,可以用 os.fork() 创建一个新的进程,windows系统不可以:

import os

ret = os.fork()
print('ret=%d' % ret) if ret == :
print('这是子进程:%d,继承自:%d' % (os.getpid(), os.getppid()))
else:
print('这是父进程:%d' % os.getpid()) >>>ret=0
这是子进程:,继承自:
ret=1537
这是父进程:

在执行了 os.fork() 这一句之后,会有两个进程同时向下执行, 返回的 ret 分别是 0(子进程)的  和  大于0(父进程)的 ,

getpid() 是获取当前进程的pid getppid() 是获取父进程的 pid 所以可以看出子进程 1537继承自1536.

注意父进程的结束并不会导致子进程的停止.

所以,一般,用 multiprocessing 模块来创建一个新的进程,多系统通用:

from multiprocessing import Process
import time
import test2 if __name__ == '__main__': p = Process(target=test2.test)
p.start() while True:
print('----mian----')
time.sleep() >>>----mian----
----test----
----mian----
----test----

target 里面是子进程调用对象的名称. (函数放在这个文件里面执行有bug,所以放在了 test2.py 文件里面,不加if __name__ == '__main__': 这一行也会有bug)

Process语法结构如下:

Process([group [, target [, name [, args [, kwargs]]]]])

  • target:表示这个进程实例所调用对象;

  • args:表示调用对象的位置参数元组;

  • kwargs:表示调用对象的关键字参数字典;

  • name:为当前进程实例的别名;

  • group:大多数情况下用不到;

Process类常用方法:

  • is_alive():判断进程实例是否还在执行;

  • join([timeout]):是否等待进程实例执行结束,或等待多少秒;

  • start():启动进程实例(创建子进程);

  • run():如果没有给定target参数,对这个对象调用start()方法时,就将执行对象中的run()方法;

  • terminate():不管任务是否完成,立即终止;

Process类常用属性:

  • name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数;

  • pid:当前进程实例的PID值;

还有一种方式创建进程,就是Process子类创建子进程, 因为 p.start() 是调用 p的run() 方法,所以需要重写run方法:

class MyProcess(Process):

    def run(self):
while True:
print('----1----')
time.sleep() if __name__ == '__main__': p = MyProcess()
p.start() while True:
print('main')
time.sleep() >>>main
--------
main
--------

当然,还有更加简单的方法创建进程.那就是进程池:

if __name__ == '__main__':

    pool = Pool() #最多三个进程

    for i in range():
pool.apply_async(test2.test, (i,)) #添加任务 如果换成 pool.apply() 那么会以堵塞的方式添加任务,一个进程执行完才能添加下一个进程 pool.close() #关闭进程池,不能再添加任务
pool.join() #等待进程池里的任务完成

需要注意的是,进程池并不和Process一样会等待子进程的结束,而是任务完成之后马上结束主进程,所以需要 pool.join() 等待子进程结束.

python__系统 : 进程的更多相关文章

  1. Linux系统——进程和计划任务管理

    进程和计划任务管理 一.进程和程序的关系 进程:在CPU及内存中运行的程序代码:动态执行的代码:每个进程可以创建一个或多个进程 程序:保存在硬盘.光盘等介质中的可执行代码和数据:静态保存的代码 二.基 ...

  2. python__系统 : 异步实现以及GIL

    创建进程的方式中有个 callback ,也就是回调. 看代码: from multiprocessing import Pool import time import os def test(): ...

  3. python__系统 : 线程

    线程之间,全局变量可以共享,但是局部变量依然是不共享的,线程的创建方式: threading.Thread(),还可以定义一个类继承Thread,重写他的run方法,具体和进程的写法一样. 那么,线程 ...

  4. python__系统 : socket_TCP补充,协程

    TCP 三次握手: SYN  -->  SYN+ACK  -->  ACK 四次挥手:  FIN --> ACK (FIN)  --> ACK TCP十种状态: LISTEN  ...

  5. python__系统 : socket_TCP相关

    tcp和udp对比起来.还是tcp相对稳定一些,但是因为有三次挥手和四次握手,以及确认包(ack)的存在,可能在速度上会比udp慢. 用python的socket模块可以建立tcp服务端: from ...

  6. python__系统 : socket_UDP相关

    socket.socket() 可以创建一个套接字: from socket import * from threading import Thread udp_socket = None dest_ ...

  7. python__系统 : 线程池

    参考文档: https://www.jianshu.com/p/b9b3d66aa0be 使用  ThreadPoolExecutor  类,  as_completed 是迭代器, 如果有任务执行完 ...

  8. 第六周——分析Linux内核创建一个新进程的过程

    "万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 &q ...

  9. 【转】Android系统开篇

    版权声明:本站所有博文内容均为原创,转载请务必注明作者与原文链接,且不得篡改原文内容.另外,未经授权文章不得用于任何商业目的. 一.引言 Android系统非常庞大.错综复杂,其底层是采用Linux作 ...

随机推荐

  1. C#中 计时器用法 运行时间

    有时候我们会需要计算某段代码运行的时间 比如一个sql查询,记录一段代码所花费的时间等等代码如下: System.Diagnostics.Stopwatch watch = new System.Di ...

  2. jeecg3.8popup弹出窗口触发失去焦点事件,引发验证弹窗,影响体验问题的解决办法

    在初始化表单的代码中添加以下加粗部分,有几个popup就定义几个标志位,主要是防止第一次失去焦点时候的弹窗(此时还未来得及选择),提交表单的时候还是会正常校验的. //popup触发失去焦点事件,设置 ...

  3. 自写Jq动画载入插件

    在写网站的时候,有一些dom第一次进入屏幕时需要加一个动画进入效果,如下图 于是,自己就研究下,要是实现gif图中左图效果大致原理就是首先将dom放在他的左侧,并将他的透明度(opacity)设置为0 ...

  4. 设置Tomcat的字符编码

    在 server.xml 中的 Connector 标签在加入 URIEncoding="UTF-8" 属性. <Connector port="8080" ...

  5. 微信小程序实战篇:商品属性联动选择(案例)

    本期的微信小程序实战篇来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点奶茶. 效果演示:   商品属性联动.gif 代码示例 1.commodity.xml <!-- < ...

  6. lnmp架构-负载均衡

    一.几个基本概念 1.pv 值 pv 值(page views):页面的浏览量 概念:一个网站的所有页面,在一天内,被浏览的总次数.(大型网站通常是上千万的级别) 2.uv值 uv值(unique v ...

  7. selenium 移动端测试

    selenium 可以进行移动测试的.Anroid ,IOS .进行移动端测试,需要相应的SDK ,apk.其中anriod 是selenium 支持有2中选择,remote server 和 tes ...

  8. Active Directory架构管理

    Active Directory由对象(用户,计算机,打印机,组等)及其属性(属性)组成.Schema 是Active Directory的重要组件,因为它定义了用于存储数据的所有对象和属性.Acti ...

  9. C语言中头文件怎么写?(本文来源网络,由黑乌鸦进一步完善)

      c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码.有利于整理思路.使代码脉络 ...

  10. 前端高质量知识(三)-JS变量对象详解

    在JavaScript中,我们肯定不可避免的需要声明变量和函数,可是JS解析器是如何找到这些变量的呢?我们还得对执行上下文有一个进一步的了解. 在上一篇文章中,我们已经知道,当调用一个函数时(激活), ...