在Python中,多进程之间的内存是相互独立的,进程之间不能直接共享变量。因此,如果你在一个进程中修改了sysupload.manager_state的值,那么在其他进程中访问该变量时,访问到的值仍然是该变量的默认值,即0。
为了在多进程之间共享变量,你需要使用一些跨进程通信的机制,例如管道、共享内存、消息队列等。这些机制可以让你在多个进程之间传递数据,并实现进程间的同步和通信。
其中,共享内存是一种常用的跨进程通信机制,它可以让多个进程共享同一个内存区域。你可以使用multiprocessing.Value或multiprocessing.Array来创建共享内存变量,并将其传递给多个进程。这些进程可以同时访问共享内存变量,并在不同的进程中修改该变量的值。
from sysupload import SysUpload
# 创建共享内存变量
manager_state = multiprocessing.Value('i', 0)
# 定义任务函数
def taskManager(mpma):
# 从共享内存变量中读取 manager_state 的值
print(manager_state.value)
# 将 manager_state 的值设置为 1
manager_state.value = 1
# 在单例类中修改 manager_state 的值
sysupload = SysUpload()
sysupload.manager_state = manager_state.value
if __name__ == '__main__':
# 创建进程并启动任务
mpma = multiprocessing.Manager()
task_ma = multiprocessing.Process(target=taskManager, args=(mpma,))
task_ma.start()
task_ma.join()
# 从单例类中读取 manager_state 的值
sysupload = SysUpload()
print(sysupload.manager_state)
在这个示例代码中,我们使用multiprocessing.Value创建了一个名为manager_state的共享内存变量,并将其传递给多个进程。在任务函数taskManager中,我们从共享内存变量中读取了manager_state的值,并将其设置为1。然后我们在单例类SysUpload中将manager_state的值设置为共享内存变量中的值。
在主进程中,我们从单例类中读取了manager_state的值,并打印出来。因为我们使用了共享内存变量,所以在多个进程之间可以共享manager_state的值,并实现进程间的同步和通信。