Python-如何使用MongoDB(pymongo)&;不带“的多过程”;MongoClient在fork之前打开。”;问题

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

我正在使用多处理,但每个进程都会出现“MongoClient在fork之前打开”错误。我做了一些研究并得出结论,我现在正在创建多个MongoClient(每个子流程一个)。但我没有找到真正的解决办法。每个进程都在使用MongoDB连接(我使用pymongo作为连接器)。有人能帮我吗

代码:

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()