加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 系统 > 正文

并发编程-多进程

发布时间:2021-01-08 07:00:41 所属栏目:系统 来源:网络整理
导读:副标题#e# 一.进程 新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的。 1.在UNIX中:fork会创建一个与父进程一摸一样的副本 2.在Windows:系统调用CreateProcess创建进程 进程的状态 程序遇到IO操作(Input、output),会阻塞
副标题[/!--empirenews.page--]

一.进程

新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的。

1.在UNIX中:fork会创建一个与父进程一摸一样的副本

2.在Windows:系统调用CreateProcess创建进程

进程的状态

程序遇到IO操作(Input、output),会阻塞,IO完成会进入就绪状态,此时等待cpu执行。正在执行的程序时间片完(cpu切到其他程序执行),会进入就绪状态。

并发编程-多进程

1.进程创建方式

在windows环境下,开启进程必须在 if __name__ == "__main__"下

并发编程-多进程

并发编程-多进程

from multiprocessing import Process
import time

def task(name):
    print(f"{name} is running")
    time.sleep(3)
    print(f"{name} is gone")

if __name__ == ‘__main__‘:
    p = Process(target=task,args=("alex",))  # 指定 这个线程去哪个函数里面去执行代码
    p.start()   #只是向操作系统发出一个开辟子进程的信号(由cpu执行进程中额任务),然后就执行下一行了
    print("__main__")


#操作系统在接受到信号之后,会在内存中开辟一个进程空间(新建一个子进程py文件),然后将主进程所有数据copy到子进程(相当于在子进程py文件中import主进程的所有内容,那么if __name__ == "__main__"下面的不会导过来),然后调用线程执行。
#开辟子进程的开销很大(时间很长),所以永远会执行主进程的代码。
进程创建的方式一

并发编程-多进程

并发编程-多进程

from multiprocessing import Process
import time
class MyProcess(Process):
    def run(self):
        print(f"{self.name} is running")
        time.sleep(3)
        print(f"{self.name} is end")

if __name__ == ‘__main__‘:
    p = MyProcess()
    p.start()              # 会自动执行run方法(run方法相当于上面的task函数)
    print("__main__")


#Process类中有name属性,默认为类名加上-1(MyProcess-1),每次新建一个子进程就MyProcess-2、MyProcess-3...
进程创建的方式二

二.进程pid

在pycharm中,父进程为pycharm,子进程为pycharm调用的python解释器。

并发编程-多进程

并发编程-多进程

import os
import time
print(f"子进程:{os.getpid()}")   #运行此py文件的python解释器的pid
print(f"父进程":{os.getppid()})  #当前pycharm的pid
pycharm查看进程id

并发编程-多进程

并发编程-多进程

from multiprocessing import Process
import time
import os

def task(name):
    print(f‘子进程:{os.getpid()}‘)
    print(f‘主进程:{os.getppid()}‘)

if __name__ == ‘__main__‘:
    p = Process(target=task,args=(‘常鑫‘,))  # 创建一个进程对象
    p.start()
    # print(‘==主开始‘)
    print(f‘====主{os.getpid()}‘)
示例代码

在cmd中,父进程为cmd,子进程为cmd调用的python解释器

并发编程-多进程

并发编程-多进程

#tasklist获取所有进程的pid
#tasklist | findstr pycharm 指定获取某一个进程
cmd查看进程id

三.进程之间的空间隔离

进程之间相互隔离,是不能互相修改数据的

并发编程-多进程

并发编程-多进程

from multiprocessing import Process
import time
name = ‘太白‘

def task():
    global name
    name = ‘刚子sb‘
    print(f‘子进程{name}‘)


if __name__ == ‘__main__‘:
    p = Process(target=task)  # 创建一个进程对象
    p.start()
    time.sleep(3)
    print(f‘主:{name}‘)


#打印结果
#子进程刚子sb
#主:太白
示例代码

四.join

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读