cengal.code_flow_control.gc.versions.v_0.gc

 1#!/usr/bin/env python
 2# coding=utf-8
 3
 4# Copyright © 2012-2024 ButenkoMS. All rights reserved. Contacts: <gtalk@butenkoms.space>
 5# 
 6# Licensed under the Apache License, Version 2.0 (the "License");
 7# you may not use this file except in compliance with the License.
 8# You may obtain a copy of the License at
 9# 
10#     http://www.apache.org/licenses/LICENSE-2.0
11# 
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17
18
19__all__ = ['DisableGC', 'EnableGC']
20
21
22"""
23Module Docstring
24Docstrings: http://www.python.org/dev/peps/pep-0257/
25"""
26
27__author__ = "ButenkoMS <gtalk@butenkoms.space>"
28__copyright__ = "Copyright © 2012-2024 ButenkoMS. All rights reserved. Contacts: <gtalk@butenkoms.space>"
29__credits__ = ["ButenkoMS <gtalk@butenkoms.space>", ]
30__license__ = "Apache License, Version 2.0"
31__version__ = "4.4.1"
32__maintainer__ = "ButenkoMS <gtalk@butenkoms.space>"
33__email__ = "gtalk@butenkoms.space"
34# __status__ = "Prototype"
35__status__ = "Development"
36# __status__ = "Production"
37
38
39from gc import isenabled as gc_isenabled, enable as gc_enable, disable as gc_disable
40
41
42# context manager for temproary disabling GC
43class DisableGC:
44    def __init__(self):
45        self.was_enabled: bool = None
46
47    def __enter__(self):
48        self.was_enabled = gc_isenabled()
49        if self.was_enabled:
50            gc_disable()
51    
52    def __exit__(self, exc_type, exc_val, exc_tb):
53        if self.was_enabled:
54            gc_enable()
55        self.was_enabled = None
56        return False
57
58
59# context manager for temporary enabling GC
60class EnableGC:
61    def __init__(self):
62        self.was_enabled: bool = None
63
64    def __enter__(self):
65        self.was_enabled = gc_isenabled()
66        if not self.was_enabled:
67            gc_enable()
68    
69    def __exit__(self, exc_type, exc_val, exc_tb):
70        if not self.was_enabled:
71            gc_disable()
72        self.was_enabled = None
73        return False
class DisableGC:
44class DisableGC:
45    def __init__(self):
46        self.was_enabled: bool = None
47
48    def __enter__(self):
49        self.was_enabled = gc_isenabled()
50        if self.was_enabled:
51            gc_disable()
52    
53    def __exit__(self, exc_type, exc_val, exc_tb):
54        if self.was_enabled:
55            gc_enable()
56        self.was_enabled = None
57        return False
was_enabled: bool
class EnableGC:
61class EnableGC:
62    def __init__(self):
63        self.was_enabled: bool = None
64
65    def __enter__(self):
66        self.was_enabled = gc_isenabled()
67        if not self.was_enabled:
68            gc_enable()
69    
70    def __exit__(self, exc_type, exc_val, exc_tb):
71        if not self.was_enabled:
72            gc_disable()
73        self.was_enabled = None
74        return False
was_enabled: bool