Python 2.7 ZeroMQ:为什么不使用多处理的客户机-服务器程序会失败?

Python 2.7 ZeroMQ:为什么不使用多处理的客户机-服务器程序会失败?,python-2.7,multiprocessing,client-server,zeromq,Python 2.7,Multiprocessing,Client Server,Zeromq,我最近遇到了ZeroMQ(pyzmq),我在一个网站上发现了这段非常有用的代码,我对它进行了修改,只进行了一次进程调用。我的代码是: import zmq import sys from multiprocessing import Process port = 5556 def server(): context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:%s" % p

我最近遇到了ZeroMQ(
pyzmq
),我在一个网站上发现了这段非常有用的代码,我对它进行了修改,只进行了一次进程调用。我的代码是:

import zmq
import sys
from multiprocessing import Process

port = 5556

def server():
    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind("tcp://*:%s" % port)
    print "Running server on port: %s" % port
    # serves only 5 request and dies
    #for reqnum in range(4):
        # Wait for next request from client
    message = socket.recv()
    print "Received request : %s from client" % message
    socket.send("ACK from %s" % port)

def client():
    context = zmq.Context()
    socket = context.socket(zmq.REQ)
    #for port in ports:
    socket.connect ("tcp://localhost:%s" % port)
    #for request in range(20):
    print "client Sending request to server"
    socket.send ("Hello")
    message = socket.recv()
    print "Received ACK from server""[", message, "]"
    time.sleep (1) 

if __name__ == "__main__":
    Process(target=server, args=()).start()

    Process(target=client, args=()).start()

    time.sleep(1)  
我意识到ZeroMQ功能强大,特别是在
多处理
/多线程调用方面,但我想知道是否可以调用
服务器
客户端
方法,而不将它们作为
\uu main\uuuuu
中的
进程调用。例如,我试着像这样称呼他们:

if __name__ == "__main__":
    server()
    client()  
由于某种原因,
服务器
启动了,但
客户端却没有启动,我不得不硬退出程序。
有没有办法不用调用
进程
来实现这一点?如果没有,那么是否有一个
socket
程序(有或没有客户机-服务器类型的体系结构)的功能与上述程序完全相同?(我想要一个程序,而不是像经典的CL-SE程序那样在不同的终端上运行两个程序)

将Ubuntu 14.04、32位虚拟机与Python-2.7一起使用,只需启动
服务器()
处理,而不是
客户端()
为什么?

由于纯
[SERIAL]
-进程调度已进入
服务器()
代码,其中已实例化
上下文
实例,因此创建了一个
套接字
-实例,接下来是对
套接字.recv()的调用
方法将整个流程挂起,进入无限和不可控的等待状态,期望收到一些消息,在本地准备好了
-LY正式的行为模式,但没有实时的交易对手,这将发送任何此类预期消息

是的,分布式计算有几个新的维度(自由度)需要关注——在这个简单的场景中,事件的基本(非)存在和顺序刚刚被识别

无论我在哪里提倡,我都不会使用
.recv()
+(你毫无疑问,它什么时候会发生,但有一点是肯定的,一旦发生,你就无法挽救相互僵持的对手)


因此,欢迎进入分布式处理现实的领域,并获得描述性的答案。尽管我理解了您所写的大部分内容,但我仍然有一个未回答的问题:是否有一个
socket
程序(有或没有客户机-服务器类型的体系结构)的功能与上面的类似我需要一个程序,不是两个。哦,当然是。只需始终使用
.recv(…)
的非阻塞形式,并调整算法以使用
轮询器.poll(…)
来测试消息的存在。单个程序应使用
多处理
并发.futures.ProcessPoolExecutor()
正确启动
def
-ed
客户端()
服务器()
,因此整个循环在单个
python
解释器终端窗口内进行,如上所示。没有什么不回答的。原始代码被阻止的原因已在原始答案前面解释。修改代码&它将运行