我正在使用 Python 2.7 和zeroRPC使客户端和服务器进行通信。我希望客户端向服务器发送请求,并且我希望服务器发送响应以确认它已收到请求。但是我希望服务器对该请求执行一些繁重的计算。这些计算将花费数小时并且不会产生任何响应,因此客户端不应一直等待;客户端-服务器连接应在服务器确认已收到请求后立即终止。我怎样才能做到这一点?
这是我现在拥有的(简化)。
服务器代码:
impor time
import zerorpc
class HelloRPC(object):
def hey(self, name):
print 'Hey, %s' % name # just so I can check that the request was received
# send response confirming that request was received
# terminate connection
time.sleep(100000000000000) # some heavy computations
s = zerorpc.Server(HelloRPC())
s.bind('tcp://0.0.0.0:4242')
s.run()
客户端代码:
import zerorpc
c = zerorpc.Client()
c.connect('tcp://MyServerName:4242')
c.hey('macarena')
它不起作用:我得到zerorpc.exceptions.LostRemote: Lost remote after 10s heartbeat
. 我知道我可以使用该heartbeat
参数使连接无限期地持续,但正如我所说,计算将花费数小时并且不会产生任何响应,所以我认为我不应该保持连接有效。
我读过关于 gevent 的文章,但我不知道如何将它用于此目的(它甚至是适合这项工作的工具吗?)。我应该使用 Python 的多处理包来生成子进程或类似的东西吗?如何处理这种事情?