zoukankan      html  css  js  c++  java
  • doraemon的python 进程模块和线程

    #### 9.2.1 进程模块
    
    ```python
    from multiprocessing import Process
    import time
    import os
    
    def func():
        print('start',os.gitpid())
        time.sleep(1)
        print('end',os.gitpid())
        
    if __name__ == '__main__':  #主进程在子进程中不会执行
        p = Process(target=func) #创建一个即将执行func函数的对象
        p.start()   #开启一个进程 #异步,开启这个进程但不会等这个进程开启
        print('main:',os.getpid())
    
    #注意:
    # windows操作系统执行开启进程的代码
        # 实际上新的子进程需要通过import父进程的代码来完成数据的导入工作
        # 所以有一些内容我们只希望在父进程中完成,就写在if __name__ == '__main__':下面
        
    # 主进程的结束逻辑
        # 主进程的代码结束
        # 所有的子进程结束
        # 给子进程回收资源
        # 主进程结束
    
    ```
    
    #### 9.2.2 join方法:阻塞,直到子进程结束就结束
    
    ```python
    import time
    from multiprocessing import Process
    
    def send_mail():
        time.sleep(3)
        print('发送了一封邮件')
    if __name__ == '__main__':
        p = Process(target=send_mail)
        p.start()
        print('join start')
        p.join()
        print('5000封邮件已经发送')
    ```
    
    ```python
    #开启10个进程给公司5000个人发送邮件,发送完邮件之后,打印一个消息
    import time 
    import random
    from multiprocessing import Process
    def send_mail(a):
        time.sleep(random.random())
        print('发送了一封邮件')
    if __name__ == '__main__'
        l = []
        for i in range(10):
            p = Process(target=send_mail,args(i,))#args只是为了判断第几次执行
            p.start()
            l.append(p)
        print(l)
        for p in l:
            p.join()
    ```
    
    #### 9.2.3 if __name__ == '__main__'
    
    ```python
    if __name__ == '__main__':
        # 控制当这个py文件被当作脚本直接执行的时候,就执行这里面的代码
        # 当这个py文件被当作模块导入的时候,就不执行这里面的代码
        print('hello hello')
    # __name__ == '__main__'
        # 执行的文件就是__name__所在的文件
    # __name__ == '文件名'
        # __name__所在的文件被导入执行的时候
    ```
    
    
    
    ### 9.3 线程(开销小)
    
    - 线程是进程中的一部分,每一个进程至少有一个线程
    - 进程是计算机最小的资源分配单位(进程是负责圈资源)
    - 线程是计算机中能被CPU调度最小单位(线程是负责执行具体代码)
    - 比较:
      - 进程:数据隔离 开销大 同时执行极端代码
      - 线程:数据共享 开销小 同时执行极端代码
  • 相关阅读:
    JS的数据类型(包含:7种数据类型的介绍、数据类型的转换、数据类型的判断)
    使用终端改变MAC默认截图存放地址
    Homebrew的安装及使用
    CSS多列布局(实例)
    CSS中元素各种居中方法(思维导图)
    用CSS伪类制作一个不断旋转的八卦图?
    DOSBOX的简单使用
    5分钟读懂JavaScript预编译流程
    基于栈虚拟机和基于寄存器虚拟机的比较
    js执行可视化
  • 原文地址:https://www.cnblogs.com/doraemon548542/p/11405458.html
Copyright © 2011-2022 走看看