Python-如何使用MongoDB(pymongo)&;不带“的多过程”;MongoClient在fork之前打开。”;问题
我正在使用多处理,但每个进程都会出现“MongoClient在fork之前打开”错误。我做了一些研究并得出结论,我现在正在创建多个MongoClient(每个子流程一个)。但我没有找到真正的解决办法。每个进程都在使用MongoDB连接(我使用pymongo作为连接器)。有人能帮我吗 代码:Python-如何使用MongoDB(pymongo)&;不带“的多过程”;MongoClient在fork之前打开。”;问题,python,mongodb,multithreading,pymongo,Python,Mongodb,Multithreading,Pymongo,我正在使用多处理,但每个进程都会出现“MongoClient在fork之前打开”错误。我做了一些研究并得出结论,我现在正在创建多个MongoClient(每个子流程一个)。但我没有找到真正的解决办法。每个进程都在使用MongoDB连接(我使用pymongo作为连接器)。有人能帮我吗 代码: def func1(): 尽管如此: col1.insert_one({…}) ... def func2(): 尽管如此: col2.insert_one({…}) ... 如果名称=“\uuuuu mai
def func1():
尽管如此:
col1.insert_one({…})
...
def func2():
尽管如此:
col2.insert_one({…})
...
如果名称=“\uuuuu main\uuuuuuuu”:
#蒙哥达
myclient=pymongo.MongoClient(“mongodb://localhost:27017/")
mydb=myclient[“testdb”]
col1=mydb[“col1”]
col2=mydb[“col2”]
#多工序
p1=过程(目标=函数1)
p2=进程(目标=函数2)
p1.开始()
p2.start()
p1.join()
p2.join()
让每个进程打开自己的MongoDB连接
注意get_mongo_client()中的警告;如果您希望从任何位置安全调用某个对象,则需要使用当前进程的PID“标记”\u mongo\u client
,如果对象的PID错误,则丢弃该对象
_mongo_client = None # Global per process
def get_mongo_client():
# Make sure not to call this within the master process, or things
# will break again.
global _mongo_client
if _mongo_client is None:
_mongo_client = pymongo.MongoClient("mongodb://localhost:27017/")
return _mongo_client
def get_mongo_col(collection, database="testdb"):
client = get_mongo_client()
return client[database][collection]
def func1():
col1 = get_mongo_col("col1")
while True:
col1.insert_one({})
# ...
def func2():
col2 = get_mongo_col("col2")
while True:
col2.insert_one({})
# ...
def main():
# Multiproccesing
p1 = Process(target=func1)
p2 = Process(target=func2)
p1.start()
p2.start()
p1.join()
p2.join()
if __name__ == "__main__":
main()