Closed
Description
Feature or enhancement
Proposal:
Current implementation relies on both _acquireLock()
and _releaseLock()
being called, otherwise a lock may never be released:
def _acquireLock(): """ Acquire the module-level lock for serializing access to shared data. This should be released with _releaseLock(). """ if _lock: try: _lock.acquire() except BaseException: _lock.release() raise def _releaseLock(): """ Release the module-level lock acquired by calling _acquireLock(). """ if _lock: _lock.release()
The majority of usages of _acquireLock()
manually add a try/except/finally block to ensure that the lock is released if an exception is thrown. Some usages of _acquireLock()
have no safety.
The proposal is to alter the usage of _acquireLock()
to be a context manager that deals with acquiring and releasing automatically rather than requiring try/except/finally blocks to be used anywhere the function is called.
For example,
usage before:
_acquireLock() try: ... finally: _releaseLock()
proposed usage:
with _acquireLock(): ...
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response