【问题标题】:Read timed out. (read timeout=None) when inserting records through simple_salesforce API in Python读取超时。 (读取超时=无)在 Python 中通过 simple_salesforce API 插入记录时
【发布时间】:2020-11-17 00:30:57
【问题描述】:

在使用 python 的 simple_salesforce 库的批量 api 插入记录时,我收到“ReadTimeout: HTTPSConnectionPool(host=', port=443): Read timed out. (read timeout=None)”。 我没有设置任何超时限制,我正在尝试插入大约 3M 条记录。我也尝试插入小块,但它有同样的问题。 如果你们中的任何人遇到过任何此类问题,请告诉我。

我的代码:

from simple_salesforce import Salesforce, SalesforceLogin

sf = Salesforce(username=    ''    
                ,password=  ''                        
                ,security_token= '')


bulk_data = []
for row in <data_to_be_inserted>.itertuples():
  d = row._asdict()
  del d['Index']
  bulk_data.append(d)

sf.bulk.<Custom_Object_Name>.insert(bulk_data)

【问题讨论】:

  • 欢迎,为了提高您在 SO 上的体验,请阅读how to askOn Topic question,然后查看Question Check listperfect question,如何创建Minimal, Complete and Verifiable Example 和@987654326 @.
  • 在目标组织中,您是否在该用户的登录历史记录中看到条目?以及您在设置 -> 批量作业中的工作定义?看看您是否可以在编写之前使用 simple-salesforce 查询任何内容。也许您的公司使用代理,您的流量被吞没了
  • 是的,我确实在登录历史记录中看到了一个条目,而且我能够插入大约 50 万条记录的较小数据块。但随着数据量的增加,这个问题更为普遍。

标签: python timeout salesforce simple-salesforce


【解决方案1】:

是的,尝试增加Requests 会话的超时时间。

simple_salesforce 包在后台使用Requests。不幸的是,simple_salesforce 似乎没有公开timeout 参数。

幸运的是,它确实允许您自定义会话并将其传递给 Salesforce() 构造函数。

我在网上找到了两种破解会话的方法:

还有第三个和第四个:

  • Salesforce 对象有一个“restful”方法,可以进行任意 API 调用。换句话说,您可以使用例如Bulk API 2.0
  • 然而,一旦您深入到这里,也许您想直接使用Requests 库进行API 调用?这是一个很棒的库,你不会遇到 simple_salesforce 的限制。

我很想弄错timeout。如果有人知道从 simple_salesforce 设置它的方法,我会全力以赴。

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2020-01-19
    • 2012-12-22
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多