多线程Cap&#Proto Python(pycapnp)RPC服务器

时间:2017-05-30 11:40:24

标签: python python-3.x python-asyncio capnproto

我正在使用pycapnp在Python 3中编写一个简单的RPC服务器。我有一个函数调用需要大约一秒钟才能完成。此功能还需要存储在缓存中的数据(目前使用lru-dict实现)。

一个客户端一切正常,但是一旦我开始增加负载,请求就开始排队(在服务器上运行的函数内部测量的挂壁时间约为1秒;在客户端上我可以轻松获得10个或更多秒)。

据我所知,pycapnp目前在其他事件循环中没有支持。

我尝试在服务器实现的ThreadPoolExecutor方法中创建__init__(还创建了缓存),然后将以下内容添加到RPC方法中:

capnp.Promise(self.executor.submit(long_running_function, request, cached_data).result()).\
        then(lambda result: setattr(_context.results, 'response', result))

虽然这有效,但主线程显然仍在等待每个Promise完成,这再次意味着客户必须排队。

任何处于类似情况的人都找到了出路?我不必必须使用pycapnp,但这是推荐的Cap&#Proto Python实施AFAICT。

序列化然后简单地通过套接字发送会更简单吗?我没有在Cap&n Proto RPC中使用承诺流水线或任何其他奇特的功能。

0 个答案:

没有答案