Show More
@@ -35,6 +35,7 import traceback | |||
|
35 | 35 | import warnings |
|
36 | 36 | |
|
37 | 37 | from typing import ( |
|
38 | Any, | |
|
38 | 39 | Iterable, |
|
39 | 40 | Iterator, |
|
40 | 41 | List, |
@@ -1812,7 +1813,7 def never(fn): | |||
|
1812 | 1813 | return False |
|
1813 | 1814 | |
|
1814 | 1815 | |
|
1815 | def nogc(func): | |
|
1816 | def nogc(func=None) -> Any: | |
|
1816 | 1817 | """disable garbage collector |
|
1817 | 1818 | |
|
1818 | 1819 | Python's garbage collector triggers a GC each time a certain number of |
@@ -1825,16 +1826,28 def nogc(func): | |||
|
1825 | 1826 | This garbage collector issue have been fixed in 2.7. But it still affect |
|
1826 | 1827 | CPython's performance. |
|
1827 | 1828 | """ |
|
1828 | ||
|
1829 | def wrapper(*args, **kwargs): | |
|
1829 | if func is None: | |
|
1830 | return _nogc_context() | |
|
1831 | else: | |
|
1832 | return _nogc_decorator(func) | |
|
1833 | ||
|
1834 | ||
|
1835 | @contextlib.contextmanager | |
|
1836 | def _nogc_context(): | |
|
1830 | 1837 |
|
|
1831 | 1838 |
|
|
1832 | 1839 |
|
|
1833 | return func(*args, **kwargs) | |
|
1840 | yield | |
|
1834 | 1841 |
|
|
1835 | 1842 |
|
|
1836 | 1843 |
|
|
1837 | 1844 | |
|
1845 | ||
|
1846 | def _nogc_decorator(func): | |
|
1847 | def wrapper(*args, **kwargs): | |
|
1848 | with _nogc_context(): | |
|
1849 | return func(*args, **kwargs) | |
|
1850 | ||
|
1838 | 1851 | return wrapper |
|
1839 | 1852 | |
|
1840 | 1853 |
General Comments 0
You need to be logged in to leave comments.
Login now