【发布时间】:2017-04-22 06:43:27
【问题描述】:
我目前正在研究分布式计算。 我的工作人员通过将其插入 mongoDB 数据库来返回结果。代码运行良好,但连接仍然打开,并且有一刻我的系统用完了套接字。 这是我的工人代码:
def worker(elt):
client=pymongo.MongoClient(MONGODB_URI)
db = client.get_default_database()
essaiElt = db['essaiElt']
#compute here
essaiElt.insert( elt.toDict())
client.close()
通过使用“netstat -anbo”这个命令,我可以看到所有的套接字仍然打开(超过 3000 个),worker 的最大数量是 14,但他们必须处理超过 10 000 个任务。
...
TCP 10.130.151.11:4999 10.130.137.128:27017 En attente 0
TCP 10.130.151.11:5000 10.130.137.128:27017 En attente 0
我尝试设置超时,但没有任何效果。
如何在不重新启动数据库的情况下关闭套接字?
Python 2.7.12 Pymongo 3.3 mongoDB 3.2.10
【问题讨论】:
-
“在此处计算”部分执行需要多长时间?在进程退出之前,单个 Python 进程是向数据库中插入许多文档还是只插入一个?
-
“在此处计算”部分执行需要多长时间?其实它是空的。在进程退出之前,单个 Python 进程是否将许多文档插入数据库,或者只插入一个?工作人员由 pp 库(并行 python)管理,因此它获取任务,创建套接字,插入元素,关闭套接字并获取另一个任务以再次执行相同操作。所以一个工人最终创建了很多套接字。
标签: python mongodb pymongo pymongo-3.x