クライアントとサーバーを通信させるために、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 の multiprocessing パッケージを使用して、サブプロセスなどを生成する必要がありますか? この種のことについてどうやって行くのですか?