本文整理汇总了Python中zmq.eventloop.zmqstream.ZMQStream.bind_to_random_port方法的典型用法代码示例。如果您正苦于以下问题:Python ZMQStream.bind_to_random_port方法的具体用法?Python ZMQStream.bind_to_random_port怎么用?Python ZMQStream.bind_to_random_port使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类zmq.eventloop.zmqstream.ZMQStream
的用法示例。
在下文中一共展示了ZMQStream.bind_to_random_port方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: ZmqPublisher
# 需要导入模块: from zmq.eventloop.zmqstream import ZMQStream [as 别名]
# 或者: from zmq.eventloop.zmqstream.ZMQStream import bind_to_random_port [as 别名]
#.........这里部分代码省略.........
if context is None:
context = zmq.Context.instance()
self.context = context
self.centralSubscribeEndpoint = parseEndpoint(centralSubscribeEndpoint,
defaultPort=DEFAULT_CENTRAL_SUBSCRIBE_PORT,
centralHost=self.centralHost)
self.publishEndpoint = parseEndpoint(publishEndpoint,
defaultPort='random')
self.heartbeatPeriodMsecs = heartbeatPeriodMsecs
#self.highWaterMark = highWaterMark
self.pubStream = None
self.heartbeatTimer = None
self.serializer = serializers.get_serializer('json')()
@classmethod
def addOptions(cls, parser, defaultModuleName):
if not parser.has_option('--centralHost'):
parser.add_option('--centralHost',
default=PUBLISHER_OPT_DEFAULTS['centralHost'],
help='Host where central runs [%default]')
if not parser.has_option('--moduleName'):
parser.add_option('--moduleName',
default=defaultModuleName,
help='Name to use for this module [%default]')
if not parser.has_option('--centralSubscribeEndpoint'):
parser.add_option('--centralSubcribeEndpoint',
default=PUBLISHER_OPT_DEFAULTS['centralSubscribeEndpoint'],
help='Endpoint where central listens for messages [%default]')
if not parser.has_option('--publishEndpoint'):
parser.add_option('--publishEndpoint',
default=PUBLISHER_OPT_DEFAULTS['publishEndpoint'],
help='Endpoint to publish messages on [%default]')
if not parser.has_option('--heartbeatPeriodMsecs'):
parser.add_option('--heartbeatPeriodMsecs',
default=PUBLISHER_OPT_DEFAULTS['heartbeatPeriodMsecs'],
type='int',
help='Period for sending heartbeats to central [%default]')
#if not parser.has_option('--highWaterMark'):
# parser.add_option('--highWaterMark',
# default=PUBLISHER_OPT_DEFAULTS['highWaterMark'],
# type='int',
# help='High-water mark for publish socket (see 0MQ docs) [%default]')
@classmethod
def getOptionValues(cls, opts):
result = {}
for key in PUBLISHER_OPT_DEFAULTS.iterkeys():
val = getattr(opts, key, None)
if val is not None:
result[key] = val
return result
def heartbeat(self):
logging.debug('ZmqPublisher: heartbeat')
self.sendJson('central.heartbeat.%s' % self.moduleName,
{'host': getShortHostName(),
'pub': self.publishEndpoint})
def sendRaw(self, topic, body):
self.pubStream.send('%s:%s' % (topic, body))
self.pubStream.flush()
def sendJson(self, topic, obj):
if isinstance(obj, dict):
obj.setdefault('module', self.moduleName)
obj.setdefault('timestamp', str(getTimestamp()))
self.sendRaw(topic, json.dumps(obj))
def sendDjango(self, modelInstance, topic=None, topicSuffix=None):
dataText = self.serializer.serialize([modelInstance])
data = json.loads(dataText)[0]
if topic is None:
topic = data['model'].encode('utf-8')
if topicSuffix is not None:
topic += topicSuffix
self.sendJson(topic, {'data': data})
def start(self):
pubSocket = self.context.socket(zmq.PUB)
self.pubStream = ZMQStream(pubSocket)
# self.pubStream.setsockopt(zmq.IDENTITY, self.moduleName)
# self.pubStream.setsockopt(zmq.HWM, self.highWaterMark)
self.pubStream.connect(self.centralSubscribeEndpoint)
logging.info('zmq.publisher: connected to central at %s', self.centralSubscribeEndpoint)
if self.publishEndpoint.endswith(':random'):
endpointWithoutPort = re.sub(r':random$', '', self.publishEndpoint)
port = self.pubStream.bind_to_random_port(endpointWithoutPort)
self.publishEndpoint = '%s:%d' % (endpointWithoutPort, port)
else:
self.pubStream.bind(self.publishEndpoint)
self.heartbeatTimer = ioloop.PeriodicCallback(self.heartbeat,
self.heartbeatPeriodMsecs)
self.heartbeatTimer.start()
self.heartbeat()