How Can I Write A Socket Server In A Different Thread From My Main Program (using Gevent)?
I'm developing a Flask/gevent WSGIserver webserver that needs to communicate (in the background) with a hardware device over two sockets using XML. One socket is initiated by the c
Solution 1:
Hope it can provide some help, In example class if we will call tenMessageSender
function then it will fire up an async thread without blocking main loop and then _zmqBasedListener
will start listening on separate port untill that thread is alive. and whatever message our tenMessageSender
function will send, those will be received by client and respond back to zmqBasedListener
.
Server Side
import threading
import zmq
import sys
classExample:
def__init__(self):
self.context = zmq.Context()
self.publisher = self.context.socket(zmq.PUB)
self.publisher.bind('tcp://127.0.0.1:9997')
self.subscriber = self.context.socket(zmq.SUB)
self.thread = threading.Thread(target=self._zmqBasedListener)
def_zmqBasedListener(self):
self.subscriber.connect('tcp://127.0.0.1:9998')
self.subscriber.setsockopt(zmq.SUBSCRIBE, "some_key")
whileTrue:
message = self.subscriber.recv()
print message
sys.exit()
deftenMessageSender(self):
self._decideListener()
for message inrange(10):
self.publisher.send("testid : %d: I am a task" %message)
def_decideListener(self):
ifnot self.thread.is_alive():
print"STARTING THREAD"
self.thread.start()
Client
import zmq
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.connect('tcp://127.0.0.1:9997')
publisher = context.socket(zmq.PUB)
publisher.bind('tcp://127.0.0.1:9998')
subscriber.setsockopt(zmq.SUBSCRIBE, "testid")
count = 0print"Listener"whileTrue:
message = subscriber.recv()
print message
publisher.send('some_key : Message received %d' %count)
count+=1
Instead of thread you can use greenlet etc.
Post a Comment for "How Can I Write A Socket Server In A Different Thread From My Main Program (using Gevent)?"