All Downloads are FREE. Search and download functionalities are using the official Maven repository.

python.msg_queue.py Maven / Gradle / Ivy

The newest version!
# Copyright 2017 Yahoo Inc.
# Licensed under the terms of the Apache 2.0 license.
# Please see LICENSE file in the project root for terms.

from __future__ import absolute_import
from __future__ import division
from __future__ import nested_scopes
from __future__ import print_function

from multiprocessing.managers import BaseManager
from multiprocessing import JoinableQueue, Queue


class MsgQueue(BaseManager): pass


mgr = None
qdict = {}
kdict = {}


def _get(key):
    return kdict[key]


def _set(key, value):
    kdict[key] = value


def start(authkey, queues, queue_max_size=2048, mode='local'):
    """
    Create a new multiprocess.Manager (or return existing one).
    """
    global mgr, qdict, kdict
    qdict.clear()
    kdict.clear()
    for q in queues:
        qdict[q] = JoinableQueue(queue_max_size)
    MsgQueue.register('get_queue', callable=lambda qname: qdict[qname])
    MsgQueue.register('get', callable=lambda key: _get(key))
    MsgQueue.register('set', callable=lambda key, value: _set(key, value))
    if mode == 'remote':
        mgr = MsgQueue(address=('', 0), authkey=authkey)
    else:
        mgr = MsgQueue(authkey=authkey)
    mgr.start()
    return mgr


def connect(address, authkey):
    """
    Connect to a multiprocess.Manager
    """
    MsgQueue.register('get_queue')
    MsgQueue.register('get')
    MsgQueue.register('set')
    m = MsgQueue(address, authkey=authkey)
    m.connect()
    return m




© 2015 - 2024 Weber Informatics LLC | Privacy Policy