Mongodb 锁定预防
Mongodb lock prevention
在查看 mongodb 文档和 pymongo API 一段时间后,我仍然不清楚我将采取何种路线作为前进的方向(现在比开始时更加困惑)。我的问题与锁有关……与其说是我已经测试并发现存在主要的并发问题,不如说是我不想在事后 运行 进入它们。
我有一个包含多个函数的 tkinter 脚本,它们都需要访问同一个文档集合,并且大多数都访问该集合中的同一个文档。
client = MongoClient()
def 1 ():
glob_client = client['ALPHA']['A-Z']
#do work:
"""Also call subprocesses that use the same database document (glob_client) in another script.
There can be 3 -10 instances of this subprocess running, listening to various http streams in a while loop,
collecting data that can come in at 100's of times per second."""
def2 ():
glob_client = client['ALPHA']['A-Z']
...
def32 ():
glob_client = client['ALPHA']['A-Z']
和被调用的子流程(在单独的脚本中),可能有多个实例:
client = MongoClient()
glob_client = client['ALPHA']['A-Z']
while True:
#do work with glob_client; updates, push, pull, reads,
那么,在这种情况下,只在每个函数中使用 client.close() 就足够了吗?
def 1 ():
glob_client = client['ALPHA']['A-Z']
#do work
client.close()
同样在 while 循环中:
while True:
#do work with glob_client; updates, push, pull, reads,
Client.close()
这就足够了吗,还是我应该在这种情况下寻求分片?或者我应该回到 SQL!
Mongodb 3.0.6 32 位,pymongo 3.03,python 2.7.
为了在这种情况下避免锁定,我将客户端放在一个单独的脚本中,foo.py:
import pymongo
CLIENT = pymongo.MongoClient(maxPoolSize=None,w=1)
COLLEC = CLIENT ['ABC']['XYZ']
然后在各种脚本中将集合导入我需要的任何地方:
from foo import COLLEC
在查看 mongodb 文档和 pymongo API 一段时间后,我仍然不清楚我将采取何种路线作为前进的方向(现在比开始时更加困惑)。我的问题与锁有关……与其说是我已经测试并发现存在主要的并发问题,不如说是我不想在事后 运行 进入它们。
我有一个包含多个函数的 tkinter 脚本,它们都需要访问同一个文档集合,并且大多数都访问该集合中的同一个文档。
client = MongoClient()
def 1 ():
glob_client = client['ALPHA']['A-Z']
#do work:
"""Also call subprocesses that use the same database document (glob_client) in another script.
There can be 3 -10 instances of this subprocess running, listening to various http streams in a while loop,
collecting data that can come in at 100's of times per second."""
def2 ():
glob_client = client['ALPHA']['A-Z']
...
def32 ():
glob_client = client['ALPHA']['A-Z']
和被调用的子流程(在单独的脚本中),可能有多个实例:
client = MongoClient()
glob_client = client['ALPHA']['A-Z']
while True:
#do work with glob_client; updates, push, pull, reads,
那么,在这种情况下,只在每个函数中使用 client.close() 就足够了吗?
def 1 ():
glob_client = client['ALPHA']['A-Z']
#do work
client.close()
同样在 while 循环中:
while True:
#do work with glob_client; updates, push, pull, reads,
Client.close()
这就足够了吗,还是我应该在这种情况下寻求分片?或者我应该回到 SQL!
Mongodb 3.0.6 32 位,pymongo 3.03,python 2.7.
为了在这种情况下避免锁定,我将客户端放在一个单独的脚本中,foo.py:
import pymongo
CLIENT = pymongo.MongoClient(maxPoolSize=None,w=1)
COLLEC = CLIENT ['ABC']['XYZ']
然后在各种脚本中将集合导入我需要的任何地方:
from foo import COLLEC