New submission from Kyle Smith <kyle.sm...@meraki.net>:
The below code works on versions 3.5.2 to 3.8.10. Higher versions tested, such as 3.9.12 and 3.10.2 result in the error: "AttributeError: Can't pickle local object". from multiprocessing import Lock from multiprocessing.managers import AcquirerProxy, BaseManager, DictProxy def get_shared_state(host, port, key): shared_dict = {} shared_lock = Lock() manager = BaseManager((host, port), key) manager.register("get_dict", lambda: shared_dict, DictProxy) manager.register("get_lock", lambda: shared_lock, AcquirerProxy) try: manager.get_server() manager.start() except OSError: # Address already in use manager.connect() return manager.get_dict(), manager.get_lock() HOST = "127.0.0.1" PORT = 35791 KEY = b"secret" shared_dict, shared_lock = get_shared_state(HOST, PORT, KEY) shared_dict["number"] = 0 shared_dict["text"] = "Hello World" This code was pulled from this article: https://stackoverflow.com/questions/57734298/how-can-i-provide-shared-state-to-my-flask-app-with-multiple-workers-without-dep/57810915#57810915 I looked around and couldn't find any open or closed bugs for this, so I'm sorry in advance if this is new expected behavior. ---------- components: Interpreter Core messages: 414137 nosy: kyle.smith priority: normal severity: normal status: open title: BaseManager.register no longer supports lambda callable 3.8.12+ type: behavior versions: Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue46871> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com