我创建了一个执行各种步骤的python流。我还使用了MongoDB,它目前用于配置目的,但会进一步用于持久性。 当我从Pycharm执行我的代码时,一切都很好,但是当我通过Airflow执行代码时,我收到了分叉警告“ UserWarning:MongoClient在分叉之前打开。仅在分叉之后创建MongoClient。”
起初我以为问题是我打开了许多Mongo客户端实例,所以我使用了单例模式,因此连接仅被实例化一次(请参阅下面的代码)。 摆脱警告的唯一方法是添加connect = False参数,就像您在我的代码中看到的那样,但这似乎是一种解决方法,而不是一个稳定的解决方案-根据文档-。
那么这里是什么问题?可能与气流有关-因为我没有使用mongo_hook-? 另外,请告诉我,一旦Mongo Client是一个好习惯,是否使用单例模式进行实例化?从各个模块调用客户端。
请注意,Mongo和Airflow在单独的docker中运行。
def singleton(class_): 实例= {}
def get_instance(*args,**kwargs):
if class_ not in instances:
instances[class_] = class_(*args,**kwargs)
return instances[class_]
return get_instance
@singleton MongoPersistence(Persistence)类:
def __init__(self,driver,host,user,password,port,db):
self._uri = '{driver}://{host}:{port}'.format(driver=driver,host=host,port=port)
self._client = MongoClient(self._uri,serverSelectionTimeoutMS=3000 # 3 second timeout,username=self.user,password=self.password
#,connect=False
)
def find_one(self,**kwargs):
return self._client[kwargs.get('db_name')][kwargs.get('collection_name')].find_one(kwargs.get('query'))
谢谢你, 迪娜
原文地址:https://www.jb51.cc/python/3191799.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。