相关文章推荐
八块腹肌的春卷  ·  linux C ...·  2 月前    · 
if __name__ == '__main__':      #在window系统中
    p = Process(target=task,args=('a',))    #设置一个进程对象,执行task,传入参数字符串a,args需要传入元组
    p.start()                               #启动进程
    p.join()                                #父进程必须等到子进程完成后才能继续执行,可设置等待超时时间
    print('这是主进程!')
 
class Myprocess(Process):       #创建一个继承Process的类
    def run(self):
        task('a')               #设置需要启动的进程
if __name__ == '__main__':
    w = Myprocess()
    w.start()
    w.join()
    print('这是主进程!')
 

进程对象常用属性:

if __name__ == '__main__':
   p = Process(target=task,args=('a',),name='process-1')    #name属性可以设置进程的名称
   p.start()
   p.join()             # 让父进程等待子进程结束,父进程让出了CPU执行权
   print(p.name)        # 进程名称
   print(p.pid)         # 获取这个进程的id
   p.terminate()        # 结束子进程
   print(p.is_alive())  # 进程是否还存活
   # p这个进程的父进程是当前运行的这个进程
   import os
   print(os.getpid())   # 当前自己进程的id
   print(os.getppid())  # 父进程的id
 

父进程与子进程执行的先后顺序:

父进程一定先执行, 一旦启动子进程,后续的代码就并发,没有先后顺序 如果父进程需要等待子进程结束后才能执行。

僵尸进程与孤儿进程:

僵尸进程: 一个进程任务执行完就死亡了,但是操作系统不会立即将其清理,为的是开启这个子进程的父进程可以访问到这个子进程的信息。

孤儿进程 : 一个父进程已经死亡,然而他的子进程还在执行,这时候操作系统会接管这些孤儿进程。

转载于:https://juejin.im/post/5be2cb305188257c3079bca7

from multiprocessing import Processimport time复制代码从程序中启动进程的两种方式:def task(i): print('%s start!'% i) time.sleep(2) print('%s stop!' % i)复制代码方法一:if __name__ == '__main__': #在window...
一般情况下,进程会等子进程完全结束后再结束,但是守护进程是随着进程代码结束而结束。而且子进程不是一定要依附进程执行。那我们如何来证明这个结论呢,下面就用一段代码简单的代码来证明子进程,守护进程进程的关系: #导入Process模块 from multiprocessing import Process #导入time模块 import time #创建一个func...
线程与线程之间共享全局变量,进程之间不能共享全局变量。 进程进程相互独立  (可以通过socket套接字实现进程间通信,可以通过硬盘(文件)实现进程通信,也可以通过队列(Queue)实现进程通信) 子进程会拷贝复制主进程的所有资源(变量、函数定义等),所以子进程比子线程耗费资源。 demo.py(多进程): import threading # 线程 import tim...
1、子进程之间的关系 。 假设是a进程创建了b进程,那么a进程就是b进程进程。 关于资源:子进程得到的是除了代码段是与进程共享的意外,其他所有的都是得到进程的一个副本,子进程的所有资源都继承进程,得到进程资源的副本。 2、线程与进程之间的关系 一个进程的线程之间共享由进程获得的资源,但线程拥有属于自己的一小部分资源,就是栈空间,保存其运行状态和局部自动变量的。
一、fork()函数 在Linux系统内,创建子进程的方法是使用系统调用fork()函数。fork()函数是Linux系统内一个非常重要的函数,它与我们之前学过的函数有一个显著的区别:fork()函数调用一次却会得到两个返回值。 fork()函数的用法:     函数fork()     所需头文件:#i...
最近在使用python的multiprocessing模块时遇到一些问题,很多人应该遇到相同问题,简单研究下,供有需要的参考。 首先,要明白multiprocessing的出现很大程度是为了解决python GIL锁带来的多线程低效问题,其次,注意Windows上和Linux上的进程、线程行为不一致。 那么我们常遇到的问题如下: 1.进程开新的子进程完成任务,进程关闭时,必须关闭子进程 2.进程被强制关闭时,子进程也必须关闭 3.子进程被强制关闭时,进程也必须关闭 4.子进程没必然联系,关闭互不
我们在fork 创建子进程的时候,有个特点就是 主进程子进程互不影响, 但是 我们在用Process 类创建的子进程就需要等待 子进程全部结束后然后再结束主进程。 下边我们验证两个问题: 主进程的和子进程之间数据隔离 主进程等待子进程结束后再结束 下边的代码 打印都是一样,说明他们公用一个数据 a=1000 def test(): global a prin...
最近在使用python的multiprocessing模块时遇到一些问题,很多人应该遇到相同问题,简单研究下,供有需要的参考。 首先,要明白multiprocessing的出现很大程度是为了解决python GIL锁带来的多线程低效问题,其次,注意Windows上和Linux上的进程、线程行为不一致。 那么我们常遇到的问题如下: 1.进程开新的子进程完成任务,进程关闭时,必须关闭子进程...