Python中进程

一句话总结

start() 之前:只有主进程在准备;start() 之后:子进程起跑,主进程继续,三者并发。

复制代码
import os
import time
from multiprocessing import Process
print(100, __name__, os.getpid())

# 定义一个 speak 函数,功能是:每隔一秒说话一次(一共说话10次)
def speak():
    for index in range(10):
        print(f'我在说话{index}, 进程pid是:{os.getpid()}, 我的父进程是:{os.getppid()}')
        time.sleep(1)

# 定义一个 study 函数,功能是:每隔一秒学习一次(一共学习15次)
def study():
    for index in range(15):
        print(f'我在学习{index}, 进程pid是:{os.getpid()}, 我的父进程是:{os.getppid()}')
        time.sleep(1)

# 注意:一定要写 if __name__ == '__main__' 这个判断,原因如下:
#   1.当创建子进程时,Python 并不会把父进程内存里的 speak 函数直接交给子进程。
#   2.Python会启动一个全新的 Python 解释器进程,重新执行当前的 .py 文件(作为模块)。
#   3.在执行过程中,重新定义出一个 speak 函数,交给子进程。
if __name__ == '__main__':
    print('我是主进程中的【第一行】打印')
    # 创建两个 Process 类的实例对象(进程对象),分别是 p1 和 p2。
    # 注意点1:p1 和 p2 就对应着以后的两个子进程,在创建它们的时候,就要指定好他们要执行的任务。
    # 注意点2:此时的 p1 和 p2 只是代码层面的两个进程对象,操作系统还没有创建 p1 和 p2 两个进程。
    p1 = Process(target=speak)
    p2 = Process(target=study)

    # 调用进程对象的 start 方法,会立刻向操作系统申请一个进程,并且会将该进程交由操作系统进行调度。
    p1.start()
    p2.start()

    print('我是主进程中的【最后一行】打印')

join() 的唯一作用

主进程阻塞,等子进程结束

进程之间不共享变量

多进程中,函数参数不是"传引用",而是"拷贝一份给你用";你改你的,我改我的,谁也影响不了谁。

multiprocessing 在创建子进程时,会把参数"序列化拷贝"一份传给子进程,子进程改的是自己的副本,不是主进程的变量。

相关推荐
日日大王学编程1 小时前
AI Agent 技术发展历程、演进逻辑与技术范式综述
人工智能·python
春涧草茶1 小时前
慢就是快16-1协程
开发语言·前端·python
5233AI开发笔记2 小时前
API 返回 429:先区分限速、并发和配额,再决定是否重试
python
databook2 小时前
经常听到的透视表是干什么的?
python·数据分析·pandas
特立独行的猫A2 小时前
我用仓颉写了个多平台发文工具:一份 Markdown,一条命令发六个平台
java·后端·python
陆陆陆六2 小时前
# 五个AI引擎的答案采集:反爬、去重与时间窗对齐的三个工程细节
python·net·ai答案采集
小小张说故事5 小时前
Python 的 a[1:5:2] 到底切出了什么?拆开 slice 对象、__getitem__ 与负步长那次反向
python
wuyk5555 小时前
PyQt6-第15讲-数据可视化QChart
python·ui·信息可视化·pyqt
天天被压力5 小时前
【A股分钟级高频数据完全手册 #04】指数分钟级行情数据接口:沪深指数Pro版最新分时取数
java·人工智能·python