自学内容网 自学内容网

父子进程之间关于对全局变量的修改同步问题

在 Python 中,当你创建子进程时,子进程会复制父进程的内存空间。这意味着在某一时刻,子进程会有父进程中列表的一个副本

  1. 父进程的列表:在父进程中定义的列表及其值是可以在子进程创建时被复制的。
  2. 子进程的列表:子进程在创建时会有自己独立的列表副本。对这个副本的任何修改不会影响父进程中的列表,也不会影响其他子进程的列表

 实例代码:

import multiprocessing

def child_process(my_list):
    # 子进程中打印自己的列表
    print("子进程中的列表:", my_list)
    my_list.append(4)  # 修改子进程中的列表

if __name__ == "__main__":
    # 父进程中的列表
    my_list = [1, 2, 3]

    # 创建子进程
    p = multiprocessing.Process(target=child_process, args=(my_list.copy(),))  # 传递列表副本
    p.start()
    p.join()

    # 父进程中的列表
    print("父进程中的列表:", my_list)  # 仍然是 [1, 2, 3]

 

 输出:

子进程中的列表: [1, 2, 3]
父进程中的列表: [1, 2, 3]

 

在这个例子中,父进程中的列表 my_list 和子进程中的列表是独立的。子进程对列表的修改不会影响父进程中的列表。

总结:

  • 子进程会复制父进程的内存状态,但它们的变量是独立的。
  • 如果需要在父子进程之间共享数据,可以使用 multiprocessing 模块中的 Value 或 Array,或者使用 Manager 进行更复杂的数据共享。
  • 用大白话来说,子进程被创建,在父进程中创建的列表,字典等,包含列表,字典中的值都会被复制,所有,子进程是可以对列表,字典进行遍历的,但是,任何进程之后在对列表,字典中的值进行修改的时候,任何进程中的列表,字典将不再会修改,也就是说,之后的每个进程对列表,字典的修改是互不影响的。

原文地址:https://blog.csdn.net/qq_62941717/article/details/142748204

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!