【发布时间】:2011-04-19 10:49:50
【问题描述】:
我需要用 Python 编写一个类似代理的程序,工作流程与 Web 代理非常相似。该程序位于客户端和服务器之间,接收客户端向服务器发送的请求,处理请求,然后将其发送到原始服务器。当然使用的协议是私有协议,使用TCP。
为了尽量减少工作量,我想使用 Python Twisted 来处理请求接收(部分充当服务器)和重新发送(部分充当客户端)。
为了最大化性能,我想使用 python 多处理(线程有 GIL 限制)将程序分成三个部分(进程)。第一个进程运行 Twisted 接收请求,将请求放入队列,并立即向原始客户端返回成功。第二个进程从队列中获取请求,进一步处理请求并将其放入另一个队列。第三个进程从第二个队列中获取请求并将其发送到原始服务器。
我是 Python Twisted 的新手,我知道它是事件驱动的,我还听说最好不要将 Twisted 与线程或多处理混合使用。所以我不知道这种方式是否合适或者仅使用Twisted是否有更优雅的方式?
【问题讨论】:
-
我怀疑使用 3 个进程而不是 1 个进程是多余的。无论如何,第一个和最后一个进程不执行任何 CPU 绑定处理......它们只是 IO 绑定。通过将所有内容实际放入一个没有线程且只有异步/基于事件的逻辑的单一 Twisted reactor 进程中,您可能会获得更易于维护和性能更好的结果。
标签: python twisted multiprocessing