
Python 3.7 adds a gc.freeze() call that moves all currently allocated objects to a 'permanent' garbage collector generation that is never garbage collected: https://docs.python.org/3.7/library/gc.html?highlight=gc#gc.freeze By calling this prior to fork()ing off worker processes, we ensure that existing pages will largely remain in shared memory (i.e. there will be only one copy shared across all worker processes and the parent). Otherwise, the mark-and-sweep action of the garbage collector causes writes to a substantial proportion of the pages, resulting in each process having its own copy. This may result in some otherwise-collectable objects (i.e. objects that are no longer reachable but that have circular references) remaining in memory permanently; however in almost all cases it is preferable to leave them allocated rather than free up gaps in existing pages that workers will then allocate new objects in, again causing the pages to be copied. Change-Id: I0f420f171669094233fe1ca1aae60c94cd0db65c
Team and repository tags
oslo.service -- Library for running OpenStack services
oslo.service provides a framework for defining new long-running services using the patterns established by other OpenStack applications. It also includes utilities long-running applications might need for working with SSL or WSGI, performing periodic operations, interacting with systemd, etc.
- Free software: Apache license
- Documentation: https://docs.openstack.org/oslo.service/latest/
- Source: https://git.openstack.org/cgit/openstack/oslo.service
- Bugs: https://bugs.launchpad.net/oslo.service
Description
Languages
Python
100%