【发布时间】:2013-07-17 21:53:40
【问题描述】:
我想要一个用 C++ 编写的类作为远程过程调用服务器。
我有一个要解析的大(超过 1 GB)文件,读取参数以实例化对象,然后将其存储在 std::map 中。我希望 RPC 服务器监听来自客户端的调用,获取从客户端传递的参数,在 map 中查找适当的值,进行计算,并将计算的值返回给客户端,我希望它服务并发请求——所以我想让多个线程监听。顺便说一句,地图填充后,它不会改变。请求只会从中读取。
我想用 Python 编写客户端。服务器可以只是一个HTTP服务器,监听POST请求,客户端可以使用urllib发送吗?
我是 C++ 新手,所以我不知道如何编写服务器。谁能给我举一些例子?
【问题讨论】:
-
为什么选择 C++?您可以简单地编写一个 python 服务器 (stackoverflow.com/questions/14088294/…)。如果您的计算耗时或在 C++ 中,只需使用 ctypes 包装它
-
你不能在 Python 中做线程,只能做多处理——所以如果服务器在 Python 中,我就不能拥有我想要的线程映射。
-
@JohnPeterThompsonGarcés:首先,是的,您可以在 Python 中执行线程。如果您只需要并发请求,那么您就完成了。如果您需要并发 CPU-bound 请求,其中 CPU-bound 代码是您的 C++ 类,只需让您的包装器围绕对该类的调用释放 GIL。虽然我们这样做了,但在进程之间共享
std::map并不难。 -
进程之间的任何共享都不需要大量的消息传递吗?我想使用共享内存。你谈到释放 GIL。这听起来很复杂。
-
您可以跨线程共享地图,就像在 C++ 中一样。对于 GIL,我发现这很有帮助 (docs.python.org/release/1.5.2/api/threads.html) 特别是 - Py_BEGIN_ALLOW_THREADS ...执行一些阻塞 I/O 操作... Py_END_ALLOW_THREADS
标签: c++ python map concurrency rpc