MongoClient
инициализирует PeriodicExecutor
в __init__
:
executor = periodic_executor.PeriodicExecutor(
interval=common.KILL_CURSOR_FREQUENCY,
min_interval=0.5,
target=target,
name="pymongo_kill_cursors_thread")
Как видите, min_interval
составляет 0,5 секунды.Согласно методу PeriodicExecutor._run
, поток будет спать не менее 0,5 секунд:
def _run(self):
while not self.__should_stop():
try:
if not self._target():
self._stopped = True
break
except:
with self._lock:
self._stopped = True
self._thread_will_exit = True
raise
deadline = _time() + self._interval
while not self._stopped and _time() < deadline:
time.sleep(self._min_interval)
if self._event:
break # Early wake.
self._event = False
Изменение 0,5 до 0,1 непосредственно в коде сокращает время с 0,6 до 0,2 на моем компьютере:
(main-4hIy5yvR) ➜ main time python ./main.py
python ./main.py 0.07s user 0.02s system 15% cpu 0.596 total
(main-4hIy5yvR) ➜ main time python ./main.py
python ./main.py 0.08s user 0.02s system 49% cpu 0.203 total