在python3.6中,我有以下代码可派生一个进程,而子代更改变量。但是,相同名称的变量保持不变
import os, sys, time
var = 42
child_pid = os.fork()
if child_pid == 0:
print(f"Child Process start {os.getpid()}.")
var = 20
print(f"Child variable {var}")
time.sleep(10)
print(f"Child Process end {os.getpid()}.")
sys.exit(0)
else:
print(f"Parent Process start {os.getpid()}.")
for x in range(20):
time.sleep(2)
print(f"Parent variable {var}")
print(f"Parent Process end {os.getpid()}.")
在示例中,如何在子进程和父进程之间共享变量var
?
答案 0 :(得分:0)
对进程进行分叉会在单独的内存空间中创建具有新PID的新进程。因此,基本上,即使它们是全局变量,也不能共享变量。
如果创建线程,则可以共享全局变量。
否则,如果有两个(或多个)进程,则可以使用IPC(代表进程间通信):https://docs.python.org/fr/3.5/library/ipc.html。
公用IPC是套接字(甚至是本地套接字),但是您可以选择另一个套接字(例如,内存映射,消息队列,共享内存...)。
这里是针对相同问题的帖子,但是在C语言中,由操作系统处理的IPC的原理仍然相同:How to share memory between process fork()?。