擅长:python、mysql、java
<p>对于这种消息传递,我喜欢使用真正的语言无关的消息队列系统,它可以在以后的项目中反复使用。如果您能够处理中间有一个消息队列代理来管理所有队列,那么可以看看AMQP。或者,如果您不需要第三方代理,那么可以看看ZeroMQ。在</p>
<p>在这两种情况下,您都可以使用sub-pub队列发送消息,如果需要,每个队列可以处理多个工人。消息可以是简单的文本字符串<a href="http://tnetstrings.org/" rel="nofollow">http://tnetstrings.org/</a>,也可以是JSON对象,或者,如果小心的话,您甚至可以发送pickled Python对象以及要执行的代码。就我个人而言,我喜欢使用JSON对象(JSON的一个子集),并将它们解压到Python dict中以便使用它们。在</p>
<p>我在大约有20个正在通信的Python进程的系统中使用了AMQP和ZeroMQ。它工作得很好,如果您需要连接到非Python的东西,您会发现已经有一个AMQP模块和一个ZeroMQ库。在</p>
<p>场景的一个有趣的扩展是用Jython、CPython和IronPython编写3种工作进程。这样,您就可以利用第三方Java和.NET模块以及lxml之类的二进制CPython模块。将其与Redis之类的东西结合在一起,这样进程就可以完全解耦,并且可以在必要时在多个服务器上运行。工作人员将把他们的结果放入Redis,而不是用大消息和小消息交织在一起,破坏消息队列系统。如果需要,worker可以发布包含Redis密钥的消息,以便其他进程可以检索该值。在</p>