父子进程之间关于对全局变量的修改同步问题
在 Python 中,当你创建子进程时,子进程会复制父进程的内存空间。这意味着在某一时刻,子进程会有父进程中列表的一个副本
- 父进程的列表:在父进程中定义的列表及其值是可以在子进程创建时被复制的。
- 子进程的列表:子进程在创建时会有自己独立的列表副本。对这个副本的任何修改不会影响父进程中的列表,也不会影响其他子进程的列表
实例代码:
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)!