Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Here's a use case - singleton instantiation on first request, where instantiation itself requires an async call (eg: to DB or external service).

    _lock = asyncio.Lock()
    _instance = None

    def get_singleton():
      if _instance:
        return _instance
      async with _lock:
        if not _instance:
          _instance = await costly_function()
      return _instance
How do you suggest to replace this?


The traditional thing would be to have an init() function that is required to be called at the top of main() or before any other methods that need it. But I agree with your point.


Now lets say its an async cache instead of singleton.


Return the cached item if it exists else spawn a task to update it (doing nothing if the task has already been spawned), await the task and return the cached item.


Thanks, that's a useful trick.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: