28 lines
556 B
Python
28 lines
556 B
Python
from .acquire import acquire
|
|
import threading
|
|
import gc
|
|
|
|
|
|
_GC_DISABLE_COUNT = 0
|
|
_GC_DISABLE_COUNT_LOCK = threading.Lock()
|
|
|
|
|
|
# 停用GC
|
|
def gc_disable():
|
|
with acquire(_GC_DISABLE_COUNT_LOCK, timeout=1):
|
|
global _GC_DISABLE_COUNT
|
|
_GC_DISABLE_COUNT += 1
|
|
if _GC_DISABLE_COUNT > 1:
|
|
return
|
|
gc.disable()
|
|
|
|
|
|
# 启用GC
|
|
def gc_enable():
|
|
with acquire(_GC_DISABLE_COUNT_LOCK, timeout=1):
|
|
global _GC_DISABLE_COUNT
|
|
_GC_DISABLE_COUNT -= 1
|
|
if _GC_DISABLE_COUNT > 0:
|
|
return
|
|
gc.enable()
|