Advertisement
Guest User

Untitled

a guest
Aug 25th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. import os
  2.  
  3.  
  4. def on_starting(server):
  5. """
  6. Attach a set of IDs that can be temporarily re-used.
  7.  
  8. Used on reloads when each worker exists twice.
  9. """
  10. server._worker_id_overload = set()
  11.  
  12.  
  13. def nworkers_changed(server, new_value, old_value):
  14. """
  15. Gets called on startup too.
  16.  
  17. Set the current number of workers. Required if we raise the worker count
  18. temporarily using TTIN because server.cfg.workers won't be updated and if
  19. one of those workers dies, we wouldn't know the ids go that far.
  20. """
  21. server._worker_id_current_workers = new_value
  22.  
  23.  
  24. def _next_worker_id(server):
  25. """
  26. If there are IDs open for re-use, take one. Else look for a free one.
  27. """
  28. if server._worker_id_overload:
  29. return server._worker_id_overload.pop()
  30.  
  31. in_use = set(w._worker_id for w in tuple(server.WORKERS.values()) if w.alive)
  32. free = set(range(1, server._worker_id_current_workers + 1)) - in_use
  33.  
  34. return free.pop()
  35.  
  36.  
  37. def on_reload(server):
  38. """
  39. Add a full set of ids into overload so it can be re-used once.
  40. """
  41. server._worker_id_overload = set(range(1, server.cfg.workers + 1))
  42.  
  43.  
  44. def pre_fork(server, worker):
  45. """
  46. Attach the next free worker_id before forking off.
  47. """
  48. worker._worker_id = _next_worker_id(server)
  49.  
  50.  
  51. def post_fork(server, worker):
  52. """
  53. Put the worker_id into an env variable for further use within the app.
  54. """
  55. os.environ["APP_WORKER_ID"] = str(worker._worker_id)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement