【问题标题】:Do I need to call Channel.close() when my process exits?当我的进程退出时,我需要调用 Channel.close() 吗?
【发布时间】:2021-01-22 10:02:44
【问题描述】:

我在 Python 脚本中使用 gRPC,并且我的大部分代码都包含在以下代码中:

def main():
    with grpc.insecure_channel(address) as channel:
        ...

我正在尝试减少代码的缩进深度,并想知道我们是否可以删除with。 (有人可能会争论这是否只是虚荣,或者有用,因为它变得更具可读性,但让我们先看看它。我只是对 gRPC 在这里的行为感到好奇。)我会用对 @ 的显式调用来替换它987654323@,但是这个脚本大部分时间可能会被 Ctrl+C 停止,这样就不会被调用。

如果通道不关闭有多糟糕?无论如何,我的进程正在退出,所以它不会泄漏内存。它会堵塞服务器上的连接槽吗?多长时间?该脚本将很少被手动调用,并且不会同时被多个实例调用。

【问题讨论】:

    标签: python grpc grpc-python


    【解决方案1】:

    当进程被杀死时,您的操作系统应该关闭连接,否则有configurable timeouts/deadlines 通常使用是明智的,因此您不太可能泄漏资源。但是不建议在不关闭频道的情况下退出。

    嵌套问题的一种解决方案是将代码提取到单独的函数中:

    def do_work(channel):
      pass
    
    def main():
      with grpc.insecure_channel(address) as channel:
        do_work(channel)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2011-11-20
      相关资源
      最近更新 更多