这个简单的脚本test.py
总是需要500毫秒以上的时间来执行:
import pymongo
pymongo.MongoClient(host='127.0.0.1')
像这样:
lanroth@ubuntu:~$ time python3 ./test.py
real 0m0.608s
user 0m0.096s
sys 0m0.012s
我已在运行Docker容器中的Ubunutu 16.04,Mint 19,Mongo的其他Linux机器或裸机上尝试过此操作。该脚本通常要花费500毫秒以上的时间,通常在580毫秒至650毫秒之间。
延迟似乎在脚本退出时发生,所以我猜是在清除连接的过程中,在500毫秒后超时。
执行以下shell命令time echo 'show dbs' | mongo
大约需要8毫秒,因此我很确定这与PyMongo有关,而不与MongoDB有关。
答案 0 :(得分:0)
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秒。根据{{1}}方法,线程将休眠至少0.5秒:
PeriodicExecutor._run
直接在代码中将0.5更改为0.1可以将我的机器上的时间从0.6减少到0.2:
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