# Note: Remember to ``pip install pyzmq gevent_zeromq``
import gevent
from gevent_zeromq import zmq
# Global Context
context = zmq.Context()
defserver():
server_socket = context.socket(zmq.REQ)
server_socket.bind("tcp://127.0.0.1:5000")
for request in range(1,10):
server_socket.send("Hello")
print('Switched to Server for %s' % request)
# Implicit context switch occurs here
server_socket.recv()
defclient():
client_socket = context.socket(zmq.REP)
client_socket.connect("tcp://127.0.0.1:5000")
for request in range(1,10):
client_socket.recv()
print('Switched to Client for %s' % request)
# Implicit context switch occurs here
client_socket.send("World")
publisher = gevent.spawn(server)
client = gevent.spawn(client)
gevent.joinall([publisher, client])
Switched to Server for1
Switched to Client for1
Switched to Server for2
Switched to Client for2
Switched to Server for3
Switched to Client for3
Switched to Server for4
Switched to Client for4
Switched to Server for5
Switched to Client for5
Switched to Server for6
Switched to Client for6
Switched to Server for7
Switched to Client for7
Switched to Server for8
Switched to Client for8
Switched to Server for9
Switched to Client for9
关于gevent猴子补丁的问题
有时候程序能够正常运行,但在另一个环境就出错,而且错误莫名其妙,我曾遇到的错误是:RecursionError: maximum recursion depth exceeded while calling a Python object,后来排查是gevent的monkey.patch_all()导致的.后来查了资料发现gevnet的monkey_patch要求越早导入越好, 最好在进程启动程序前,第一个导入.