zoukankan      html  css  js  c++  java
  • 操作系统知识

    操作系统

     操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

    并发

    并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

    Process类的介绍

    Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,可用来开启一个子进程
    
    强调:
    1. 需要使用关键字的方式来指定参数
    2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号


    参数介绍:

    group参数未使用,值始终为None
    
    target表示调用对象,即子进程要执行的任务
    
    args表示调用对象的位置参数元组,args=(1,2,'egon',)
    
    kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}
    
    name为子进程的名称
    

    方法介绍:

    p.start():启动进程,并调用该子进程中的p.run() 
    p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法  
    
    p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁
    p.is_alive():如果p仍然运行,返回True
    
    p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间。
    

    属性介绍:

    p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
    
    p.name:进程的名称
    
    p.pid:进程的pid
    from multiprocessing import Process
    import time,os
    
    def task():
        print('%s is running,parent id is %s' % (os.getpid(),os.getppid()))
        time.sleep(3)
        print('%s is done,parent id is %s' % (os.getpid(),os.getppid()))
    
    if __name__ == '__main__':
        # Process(target=task,kwargs={'name':'子进程1'})
        p=Process(target=task,)
        p.start() #仅仅只是给操作系统发送了一个信号
    
        print('主%s parent id is %s '%(os.getpid(),os.getppid()))
    View Code
    
    

    Process类的使用

    注意:在windows中Process()必须放到# if __name__ == '__main__':下

    创建并开启子进程的方式一

    from multiprocessing import Process
    import time
    
    def task(name):
        print('%s is running' % name)
        time.sleep(3)
        print('%s is done' %name)
    
        if __name__ == '__main__':
            # Process(target=task,kwargs={'name':'子进程1'})
            p=Process(target=task,args=('子进程1',))
            p.start() #仅仅只是给操作系统发送了一个信号
    
            print('')
    View Code

    创建并开启子进程的方式二

    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)
    
    
    if __name__ == '__main__':
        p=MyProcess('子进程1')
        p.start()
        print('')
    View Code

    Process对象的join方法

    在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况

    情况一:在主进程的任务与子进程的任务彼此独立的情况下,主进程的任务先执行完毕后,主进程还需要等待子进程执行完毕,然后统一回收资源。

    情况二:如果主进程的任务在执行到某一个阶段时,需要等待子进程执行完毕后才能继续执行,就需要有一种机制能够让主进程检测子进程是否运行完毕,在子进程执行完毕后才继续执行,否则一直在原地阻塞,这就是join方法的作用

    from multiprocessing import Process
    import time,os
    
    def task():
        print(1,'%s is running,parent id is %s' % (os.getpid(),os.getppid()))
        time.sleep(9)
        print(2,'%s is done,parent id is %s' % (os.getpid(),os.getppid()))
    
    if __name__ == '__main__':
        print(os.getpid())
        p=Process(target=task,)
        p.start() #仅仅只是给操作系统发送了一个信号
        p.join()
        print('',(os.getpid(),os.getppid()))
        print(p.pid)
    View Code
  • 相关阅读:
    算法7-9:有向图搜索算法
    STM32W108无线传感器网络节点自组织与移动智能体导航技术
    no matching provisioning profiles found
    数组处理函数
    字符串相关函数整理
    [Other]来做一个微信打印机吧 -- 微信打印的设计思路參考
    [WF4.0 实战] 事件驱动应用
    OpenCV——RGB三通道分离
    泛型的使用
    JDBC使用步骤
  • 原文地址:https://www.cnblogs.com/baoguniang/p/9851910.html
Copyright © 2011-2022 走看看