如何获取获取SyncManager来访问程序变量?

时间:2019-05-03 22:01:19

标签: python-3.x multiprocessing

我正在尝试向server.py添加bool kill_manager,这将允许我从client.py更改其值并导致server.py退出。我希望能够将server.py启动到在后台运行的独立终端,并且仍然能够远程关闭它。当前,这两个程序在同一台计算机上运行,​​但是server.py可能会在以后的树莓派上运行。

我为server.py和client.py提供了一个简单的示例,我相信它应该具有此功能。可以看出,client.py可以将kill_manager的值更改为True,但是server.py从不更新其值,因此该程序从不关闭。

我不知道为什么client.py设置kill_manager = True后server.py无法关闭。 server.py和client.py可以访问两个不同的kill_manager变量吗?

server.py

from multiprocessing.managers import SyncManager

class myManager(SyncManager):
    pass

kill_manager = False

def kill_manager_bool():
    return kill_manager

if __name__ == "__main__":
    myManager.register("kill_manager_bool", kill_manager_bool)
    manager = myManager(("127.0.0.1", 5001), authkey=b"password")
    manager.start()

    while True:
        if kill_manager:
            print('killing manager')
            manager.shutdown()
            exit()

client.py

from multiprocessing.managers import SyncManager
from time import sleep

class myManager(SyncManager):
    pass

if __name__ == "__main__":
    myManager.register("kill_manager_bool")

    manager = myManager(("127.0.0.1", 5001), authkey=b"password")
    manager.connect()

    kill_manager = manager.kill_manager_bool()

    sleep(1)
    print(kill_manager)
    kill_manager = True
    print(kill_manager)

0 个答案:

没有答案