schrodinger.tasks.taskszmq module

Provides a Qt-based interface for a ZMQ REP server and REQ client. The server class is designed for use in an event-driven application and reports updates via Qt signals.

Example usage:

class MyServer(ZmqServer):
def makeReply(self, request):
if request == ‘hello’:

return ‘world’

elif request == ‘goodbye’:

return ‘cruel world’

server = MyServer() port_num = server.port_num

In a separate process/thread:

client = ZmqClient(‘localhost’, port_num) reply = client.request(‘hello’) assert reply == ‘world’

exception schrodinger.tasks.taskszmq.TimeoutError

Bases: RuntimeError

class schrodinger.tasks.taskszmq.Context(io_threads: int = 1, **kwargs: Any)

Bases: zmq.sugar.context.Context

socket(*args, **kwargs)

Create a Socket associated with this Context.

socket_typeint

The socket type, which can be any of the 0MQ socket types: REQ, REP, PUB, SUB, PAIR, DEALER, ROUTER, PULL, PUSH, etc.

kwargs:

will be passed to the __init__ method of the socket class.

class schrodinger.tasks.taskszmq.ZmqServer(port_num=None)

Bases: PyQt6.QtCore.QObject

The ZmqServer class provides a Qt-based interface for a ZMQ REP server. To use, subclass and override the makeReply method to generate a reply for each request.

requestReceived

A pyqtSignal emitted by instances of the class.

replySent

A pyqtSignal emitted by instances of the class.

__init__(port_num=None)
makeReply(request)
shutdown()

Shutdown the server. This method blocks until shutdown is complete.

class schrodinger.tasks.taskszmq.ZmqClient(server_host, port_num)

Bases: PyQt6.QtCore.QObject

The ZmqClient class provides a Qt-based interface for a ZMQ REQ client. To use, create an instance and call the request method to send a request and receive a reply from the server.

ZmqClient should not be used in the main GUI thread, and cannot be run in the same thread as the server, due to blocking zmq operations.

__init__(server_host, port_num)
request(string, timeout=10)

Send a request to the server and wait for a reply. If no reply is received within the timeout, a TimeoutError is raised.

Parameters
  • string – the request string

  • timeout – time to wait for the server to reply (seconds)

Returns

the reply string

shutdown()
schrodinger.tasks.taskszmq.get_portnum()