• 02进程


     1 """
     2 如何开启一个进程
     3 if __name__ == '__main__':原理
     4     main 的原理  它是分配资源的
     5     os
     6     Process
     7     fun
     8     用对象开启一个进程,需要再次开启资源,
     9     import  父进程文件
    10     加main的话就不用开一个又开一个进程,在Windows中的时候。
    11     在linux系统中运行的话
    12     copy了一份父进程中的东西
    13 
    14 父进程与子进程之间的关系
    15     父进程要负责回收子进程的资源
    16     父进程结束
    17     子进程结束后父进程才结束
    18     父进程结束,父进程代码显示结束了但是代码不会运行结束,会先回收子进程的资源,子进程结束后父进程才结束
    19     两个print先打印结束
    20 
    21 进程有什么特点?
    22     空间数据是完全隔离的,进程跟进程之间是隔离的不共享的
    23 返回值   不可以 子进程中的东西是返不回去的
    24 
    25 join
    26 
    27 面向对象开启进程
    28 """
    29 
    30 import os
    31 import time
    32 # print(os.getpid())   # 运行的那一刻就是当前py文件的进程号,她的父id是pycharm的id
    33 # print(os.getppid())
    34 from multiprocessing import Process
    35 
    36 n = 10
    37 
    38 
    39 def fun(num):
    40     global n
    41     n = 100
    42     # print("我得id是%s,父id是%s" % (os.getpid(), os.getppid()))   # 我得id是19876,父id是20532
    43     print(num)
    44     print("小明")
    45 
    46 
    47 # fun()
    48 # print(n)   # 100
    49 
    50 
    51 if __name__ == '__main__':
    52     # print("我得id是%s,父id是%s" % (os.getpid(), os.getppid()))   # 打印出来的是当前py的id  我得id是20532,父id是12012
    53     p = Process(target=fun, args=[2])  # 实例化对象,元组是一个元素的话一定要加逗号
    54     p.start()  # 开启子进程
    55     print("结束")
    56     print(n)  # 10
    57 
    58 """
    59 第二部分向下开始
    60 join方法
    61 """
    62 import os
    63 import time
    64 import random
    65 from multiprocessing import Process
    66 
    67 
    68 # 以下是同步效果
    69 def fun(num):
    70     print("%s号小明发邮件" % (num))
    71 
    72 
    73 if __name__ == '__main__':
    74     for i in range(10):   # 开十个进程
    75         p = Process(target=fun, args=(i,))  # 实例化对象
    76         p.start()  # 开始子进程
    77         p.join()   # 阻塞,等子进程结束
    78     print("发送结束")
    79 
    80 
    81 # 以下是异步效果
    82 def fun(num):
    83     print("%s号小明发邮件" % (num))
    84 
    85 
    86 if __name__ == '__main__':
    87     list = []  # 来一个空列表放新添加的对象
    88     for i in range(10):  # 先循环此代码,开启所有的进程,循环十次,下面执行十次相当于创建十个进程
    89         p = Process(target=fun, args=(i,))  # 实例化对象,元组一个元素的时候必须加逗号
    90         p.start()  # 开始子进程
    91         list.append(p)  # 把每个对象添加在列表中,之后在进行阻塞
    92     for j in list:  # 再循环此代码,按执行完的顺序阻塞
    93         j.join()  # 阻塞,直到子进程执行完毕
    94     print("发送结束")  # 最后打印结束
  • 相关阅读:
    Shell从入门到精通进阶之四:流程控制
    15个Python面试问题(附答案)
    python教程:内置函数和语法糖触发魔法方法
    python教程:利用while求100内的整数和
    python 教程:read(),readline() 和 readlines() 比较
    python生成随机数:uniform(), randint(), gauss(), expovariate()
    Python教程: 字符串转义序列及格式化
    python单例模式的五种实现方式
    Python NumPy的常用函数
    python五种调试或排错的方法
  • 原文地址:https://www.cnblogs.com/zh1127487137/p/12624758.html
Copyright © 2020-2023  润新知