今天在python中遇到了一个警告,如下:
UserWarning: MongoClient opened before fork. Create MongoClient only after forking. See PyMongo's documentation for details: http://api.mongodb.org/python/current/faq.html#is-pymongo-fork-safe
"MongoClient opened before fork. Create MongoClient only "
查找资料后发现,是在多进程环境中,一个MongoClient实例不应该被当作参数在不同进程间进行传递。PyMongo是线程安全的,但并不是进程安全的,以本文中的demo为例,MongoClient的实例不应该从父进程传递到子进程,这两个进程应该各自创建属于自己的MongoClient实例,否则,可能会发生死锁等意外情况,而上面的警告便是提醒这些操作。
def insert_data(target_db, data_list):
target_db.insert_many(data_list)
if __name__ == '__main__':
# 这里将测试的数据库的地址替换为了*
source_db = MongoClient('mongodb://admin:admin@*.*.*.*:*')['test_db']['test_1_13_1&