我正在使用pyGTK和python gRPC服务器。两者都在一个非常基本的设置中。
我只需创建gtk.Window()
,show()
并运行gtk.main()
循环。
我的服务器就是这样开始的:
def startServing():
global server
print("Starting server...")
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
laserClient_pb2_grpc.add_LComServicer_to_server(LCom(), server)
server.add_insecure_port('[::]:50053') # [::] is the same as 0.0.0.0 server.start()
print("Server is running...")
所以我打电话给:
try:
startServing()
gtk.main()
except KeyboardInterrupt:
server.stop(0)
这会正确创建窗口,但我从未收到来自Java客户端的请求。 (java客户端不是问题。)
我在互联网上阅读了很多内容并且我不理解所有pyGTK线程处理,但我在gtk.gdk.threads_init()
之前尝试了startServing()
并且我收到了请求。但是我每秒只收到1个请求,而我的客户端每50ms发送一个请求。如果我删除gtk.main()
并添加while循环:
while True:
time.sleep(60)
...我几乎每50到100毫秒收到一次请求。这是预期的行为!
然而,由于没有gtk.main()
循环,我的窗口不会更新。我甚至尝试添加:
while True:
while gtk.events_pending():
gtk.main_iteration()
time.sleep(0.05)
但这又给了每秒一次请求。
我不知道我现在该做什么。我真的想在同一个程序中一起使用gRPC和pyGTK。