Skip to content

Instantly share code, notes, and snippets.

@schipiga
Created November 20, 2019 09:46
Show Gist options
  • Save schipiga/158064c895795d59d45643377698c997 to your computer and use it in GitHub Desktop.
Save schipiga/158064c895795d59d45643377698c997 to your computer and use it in GitHub Desktop.
import threading
import weakref
from some_where import MyServer
class MyWeakKeyDictionary(weakref.WeakKeyDictionary):
def __init__(self, *args, **kwgs):
super().__init__(*args, **kwgs)
remove = self._remove
def _remove(k, selfref=weakref.ref(self)):
self = selfref()
if self is not None:
try:
self.data[k].stop()
except Exception:
pass
return remove(k)
self._remove = _remove
servers_pool = MyWeakKeyDictionary()
def get_server():
current_thread = threading.current_thread()
server = servers_pool.get(current_thread)
if not server:
server = MyServer()
server.start()
servers_pool[current_thread] = server
return server
def handler(event):
server = get_server()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment