【问题标题】:Max no of 200 conversations exceeded error in PyRFCPyRFC 中超过 200 个对话的最大数量错误
【发布时间】:2019-12-04 14:46:50
【问题描述】:

我从PyRFC 库中收到此错误:

Traceback (most recent call last):
...
  File "/.../sap_connection.py", line 486, in get_connection
    return Connection(**get_connection_dict(contact_host))
  File "src/pyrfc/_pyrfc.pyx", line 182, in pyrfc._pyrfc.Connection.__init__
  File "src/pyrfc/_pyrfc.pyx", line 226, in pyrfc._pyrfc.Connection._open
  File "src/pyrfc/_pyrfc.pyx", line 256, in pyrfc._pyrfc.Connection._error
pyrfc._exception.CommunicationError: RFC_COMMUNICATION_FAILURE (rc=1): key=RFC_COMMUNICATION_FAILURE, message=
LOCATION    CPIC (TCP/IP) on local host with Unicode
ERROR       max no of 200 conversations exceeded
TIME        Wed Dec  4 13:53:22 2019
RELEASE     753
COMPONENT   CPIC (TCP/IP) with Unicode
VERSION     3
RC          466
MODULE      /bas/753_REL/src/krn/si/cpic/r3cpic.c
LINE        15830
COUNTER     201
 [MSG: class=, type=, number=, v1-4:=;;;]

到目前为止,我创建了很多 Connection 实例并且从未显式关闭它们。

如果 Python 进程再次启动(通过 linux cron 作业),则 RFC 调用工作正常。

我该怎么办:

  • 明确关闭连接?
  • 重用连接?
  • 还有别的吗?

相关问题:https://github.com/SAP/PyRFC/issues/150

【问题讨论】:

    标签: python abap pyrfc


    【解决方案1】:

    存在有关此错误的 SAP 注释。它说服务器端有限制,您需要限制您的客户端。 Note 316877 包含用于增加大小的服务器端参数。
    关闭连接是有意义的。因为 RFC 在 TCP/IP 级别上工作,所以在响应看起来像 rest/http 后它没有自动关闭例程。

    【讨论】:

    【解决方案2】:

    我现在使用这个 StatelessConnection:

    from pyrfc import Connection
    class StatelessConnection(Connection):
        def call(self, rfc_name, **kwargs):
            try:
                return super(StatelessConnection, self).call(rfc_name, **kwargs)
            finally:
                self.close()
    

    性能可能会低一些,但它使整体处理更容易。

    ...我比较了性能。如果每次通话后关闭连接,您会损失多少?

    for i in range(1000):
        #conn.close()
        print(i, conn.call('RFC_PING'))
    

    我的系统上的持续时间是相等的 - 使用“close()”和没有“close()”:28 秒。

    也许将 StatelessConnection 设为 PyRFC 中的默认值会有意义吗?

    【讨论】:

    • 你为什么更喜欢重用已经打开的连接?
    • @Jagger 我喜欢“无国籍”。保持打开的连接是一种状态。没有状态更容易。对我来说,问题是:如果我走更复杂的路,我会获得什么好处。根据我的小测试,我一无所获。速度是一样的。如果建立连接非常慢,这可能会有所不同,但在我的设置中似乎并非如此。关于无状态:github.com/guettli/programming-guidelines/blob/master/…
    • 无状态会话的专业人士:写得不好的不可重入代码的问题更少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2013-04-17
    • 2017-07-30
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多