如何在python中与分叉进程共享变量?

时间:2019-07-08 09:59:20

标签: python-3.x fork

在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

1 个答案:

答案 0 :(得分:0)

对进程进行分叉会在单独的内存空间中创建具有新PID的新进程。因此,基本上,即使它们是全局变量,也不能共享变量。

如果创建线程,则可以共享全局变量。

否则,如果有两个(或多个)进程,则可以使用IPC(代表进程间通信):https://docs.python.org/fr/3.5/library/ipc.html

公用IPC是套接字(甚至是本地套接字),但是您可以选择另一个套接字(例如,内存映射,消息队列,共享内存...)。

这里是针对相同问题的帖子,但是在C语言中,由操作系统处理的IPC的原理仍然相同:How to share memory between process fork()?