如何设置 python-firestore AsyncClient 的超时设置?

How to set timeout setting for python-firestore AsyncClient?

我将 google.cloud.firestore 与异步客户端一起使用,我想添加超时设置以添加文档,但我无法以某种方式...

版本

问题

当我运行这段代码without setting firebase server turning on:

from firebase_admin import firestore
db_client = firestore.AsyncClient()

async def some_function():
  await asyncio.wait_for(
    db.collection('states')
      .add({'some':'values'})
    ,timeout=10
  )

这应该会导致错误 only after when 10 secs 已经过去,但实际上这会导致错误 immidiately 说:

503 failed to connect to all addresses

如何修复 db.collection('states').add(...) 以适当等待?

谢谢!

首先,您应该检查是否有任何网络设置阻止连接。 503 表示库无法与后端建立连接 API。现在来到 Firestore 超时值,没有办法调整它。根据 this.

,超时请求默认为系统指定值

写操作永远不会超时,也不会因为网络丢失而失败。您不应将 Firestore 读取和写入视为典型的输入和输出操作。写入 Firestore 的数据最终会同步,只要有可能就会同步。

与在 Firebase 实时数据库中启用离线持久性不同,您必须执行以下操作:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

在 Cloud Firestore 中,默认启用离线持久化。所以,没有必要使用:setPersistenceEnabled(true)。当您处于离线状态时,结果将来自您的应用正在使用的 Cloud Firestore 数据的缓存副本。要检查数据是来自缓存还是来自 Firestore 服务器,您可以使用以下代码行:

String source = querySnapshot.getMetadata().isFromCache() ? "Local Cache" : "Firebase Servers”

用Firestore编写的文档如果不执行会立即保存在本地,直到它们能够与服务器同步,这可能是未来的任何时间。

  • 要检测它是否能够这样做,看看这个 .
  • 要检测文档何时写入服务器,请使用 成功监听器。此示例来自 Firestore 文档 添加文档 展示了如何:

// 使用生成的 id 添加一个新文档。

Map<String, Object> data = new HashMap<>(); 
data.put("name", "Tokyo"); 
data.put("country", "Japan"); 
db.collection("cities") .add(data) .addOnSuccessListener(
new OnSuccessListener<DocumentReference>() { 
@Override public void onSuccess(DocumentReference documentReference) 
{ Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId()); 
} })
 .addOnFailureListener(new OnFailureListener() { 
@Override public void onFailure(@NonNull Exception e) 
{ Log.w(TAG, "Error adding document", e); 
} });

注意:onSuccess 或onFailure 只有在连接到服务器时才会被调用。唯一的例外是交易操作,它需要网络才能完成。

不过有一个request in the Python client library for Firestore asking for this improvement. Also have a look at this for reference.