【问题标题】:Python: How to stop a thrift server programmatically?Python:如何以编程方式停止节俭服务器?
【发布时间】:2020-09-11 00:27:53
【问题描述】:

我只是想停止/关闭一个用 python 创建的节俭的 TSimpleServer。但是,由于错误“AttributeError: 'TSimpleServer' object has no attribute 'stop'”,没有 .stop() 和 .close() 可以执行此操作。有什么办法可以解决这个问题吗?任何帮助将不胜感激。

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
from rpc1_nodejs_call_python import printService

from TestHandler import TestHandler

processor = printService.Processor(TestHandler())
transport = TSocket.TServerSocket(host='127.0.0.1', port=8080)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)

print("Starting thrift server in python...")
server.serve()

print("Stoping thrift server in python...")
server.stop()
# server.close()

【问题讨论】:

    标签: python server thrift


    【解决方案1】:

    实际上,这似乎根本不可能/不可预见: https://github.com/apache/thrift/blob/master/lib/py/src/server/TServer.py

    正如您所注意到的,没有 stop() 并且所有三个服务器实现目前都在无限循环 while true

    假设有人会添加这个,通常的方法是有一个stop() 方法,它设置一些标志或类似的东西来指示终止。必须从另一个线程调用它,因为第一个线程在服务时仍保留在serve() 中。

    底线:似乎还没有实现。

    【讨论】:

    • 非常感谢。哪些标志信号可用于通知另一个线程终止?在无限循环中似乎没有相关的检测。
    • 完全是“底线:似乎尚未实现” ...但我们接受拉取请求:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2016-04-17
    • 2020-08-04
    相关资源
    最近更新 更多