zoukankan      html  css  js  c++  java
  • 进程

    进程:

      什么是进程

        进程指的是一个程序的运行过程,或者说一个正在执行的程序
    所以说进程一种虚拟的概念,该虚拟概念起源操作系统
    串行: 一个任务完完整整运行完毕才能执行下一个任务
    并发: 多个任务看起来是同时运行的,单核下就能实现并发(并发=切换+保存状态)
    并行: 多个任务是真正意义上的同时运行,只有多核才能实行并行

    开启子进程的俩种方式
    from multiprocessing import Process
    import time
    
    def task(name):
        print('%s is running' %name)
        time.sleep(3)
        print('%s is done' %name)
    
    # 在windows系统上,开启子进程的操作必须放到if __name__ == '__main__'的子代码中
    if __name__ == '__main__':
        p=Process(target=task,args=('egon',))     
        #或者这样写Process(target=task,kwargs={'name':'egon'})
        p.start() # 只是向操作系统发送了一个开启子进程的信号
        print('')
    
    结果:
    主
    egon is running
    egon is done
    第一种
    from multiprocessing import Process
    import time
    
    class Myprocess(Process):
        def __init__(self,name):
            super().__init__()
            self.name=name
    
        def run(self):
            print('%s is running' %self.name)
            time.sleep(3)
            print('%s is done' %self.name)
    
    # 在windows系统上,开启子进程的操作必须放到if __name__ == '__main__'的子代码中
    if __name__ == '__main__':
        p=Myprocess('egon')
        p.start() # 只是向操作系统发送了一个开启子进程的信号
        print('')
    
    结果:
    主
    egon is running
    egon is done
    第二种
    join:让主进程在原地等待,等待子进程运行完毕,不会影响子进程的执行
    from multiprocessing import Process
    import time
    
    def task(name,n):
        print('%s is running' %name)
        time.sleep(n)
        print('%s is done' %name)
    
    if __name__ == '__main__':
        p1=Process(target=task,args=('子1',1))
        p2=Process(target=task,args=('子2',2))
        p3=Process(target=task,args=('子3',3))
    #第一种
        start=time.time()
        p1.start()
        p2.start()
        p3.start()
        time.sleep(5)
    
        p3.join() #3
        p1.join()
        p2.join()
        print('',(time.time()-start))
    #第二种
        start=time.time()
        p_l=[]
        for i in range(1,4):
            p = Process(target=task, args=('子%s' %i, i))
            p_l.append(p)
            p.start()
    
        for p in p_l:
            p.join()
        print('', (time.time() - start))
    结果:
    子2 is running
    子1 is running
    子3 is running
    子1 is done
    子2 is done
    子3 is done
    主 5.143582582473755
    举例

    进程之间内存空间相互隔离

    from multiprocessing import Process
    n=100
    def task():
        global n
        n=0
    #子进程
    # if __name__ == '__main__':
    #     p=Process(target=task)
    #     p.start()
    #     p.join()
    #     print(n)
    结果:100
    
    #主进程
    task()
    print(n)
    结果:0
    举例
    进程pid:每一个进程在操作系统内都有一个唯一的id号,称之为pid
    from multiprocessing import Process,current_process
    import time
    
    def task():
        print('%s is running' %current_process().pid)
        time.sleep(10)
        print('%s is done' %current_process().pid)
    
    if __name__ == '__main__':
        p=Process(target=task)
        p.start()
        print('',current_process().pid)
    #可以在cmd中使用tasklist |findstr 进程号 看到
    结果:
    主 11956
    11660 is running
    11660 is done
    进程pid
    进程对象其他相关的属性或方法
    from multiprocessing import Process
    import time,os
    
    def task():
        print('%s is running 爹是:%s' %(os.getpid(),os.getppid()))
        time.sleep(5)
        print('%s is done 爹是:%s' %(os.getpid(),os.getppid()))
    
    
    if __name__ == '__main__':
        p=Process(target=task)
        p.start()
        print('主:%s 主他爹:%s' %(os.getpid(),os.getppid()))
    结果:
    主:11508 主他爹:4920
    9928 is running 爹是:11508
    9928 is done 爹是:11508
    getppid
    from multiprocessing import Process,current_process
    import time,os
    
    def task():
        print('%s is running 爹是:%s' %(os.getpid(),os.getppid()))
        time.sleep(10)
        print('%s is done 爹是:%s' %(os.getpid(),os.getppid()))
    
    if __name__ == '__main__':
        p=Process(target=task,name='子进程1')
        p.start()
        print(p.name)
        p.terminate()  #杀死子进程
        time.sleep(0.1)
        print(p.is_alive())  #判断是否还在运行
        print('主:%s 主他爹:%s' %(os.getpid(),os.getppid()))
    结果:
    子进程1
    False
    主:10948 主他爹:4920
    terminate和is_alive
  • 相关阅读:
    CYQ.Data 轻量数据层之路 V4.0 版本发布
    基于MSAA的自动化封装和设计—python版(转)
    【自然框架】之鼠标点功能现(二):表单控件的“应用”—— 代码?只写需要的!
    论管理员的不作为!!!
    【自然框架】之通用权限的Demo(二):添加人员、添加账户、添加角色里面的账户以及列表的权限验证
    使用接口来统一控件的取值、赋值和初始化
    【自然框架】之通用权限(八):权限到字段(列表、表单、查询)
    辩论赛 VS 讨论组
    【自然框架】表单控件 之 一个表单修改多个表里的记录
    【自然框架】之“解耦”初探
  • 原文地址:https://www.cnblogs.com/zhouhao123/p/11247968.html
Copyright © 2011-2022 走看看