from threading import Lock from multiprocessing import Process from multiprocessing.managers import SyncManager import time class SharedData(): def __init__(self): self.a=0 self.b=None self.c=None self._mutex=Lock() def good(self,a,b): with self._mutex: d=self.__get_set(a,b) return d def bad(self,a,b): return self.__get_set(a,b) def __get_set(self,a,b): cpt=self.a cpt+=1 self.b=b self.c=self.a self.a=cpt d=self.a return d def make_server(port, authkey): shared_data=SharedData() manager = SyncManager(address=('', port), authkey=authkey) manager.register("get_proxy",callable=lambda : shared_data) manager.start() return manager def make_client(ip, port, authkey): manager = SyncManager(address=(ip, port), authkey=authkey) manager.register("get_proxy") manager.connect() return manager def do_stuff(): client=make_client('',6666, b"foo") data_proxy=client.get_proxy() for i in range(10): t_s=time.time() c=data_proxy.good([1,2],[3,4]) print(time.time()-t_s) print(c) server=make_server(6666, b"foo") foo = Process(target=do_stuff) foo.start() foo.join()