john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

concurrency threading external communication control through queue inherit super

# externally controllable thread

class SocketClientThread(threading.Thread):
    """ Implements the threading.Thread interface (start, join, etc.) and
        can be controlled via the cmd_q Queue attribute. Replies are placed in
        the reply_q Queue attribute.
    """
    def __init__(self, cmd_q=Queue.Queue(), reply_q=Queue.Queue()):
        super(SocketClientThread, self).__init__()
        self.cmd_q = cmd_q
        self.reply_q = reply_q
        self.alive = threading.Event()
        self.alive.set()
        self.socket = None

        self.handlers = {
            ClientCommand.CONNECT: self._handle_CONNECT,
            ClientCommand.CLOSE: self._handle_CLOSE,
            ClientCommand.SEND: self._handle_SEND,
            ClientCommand.RECEIVE: self._handle_RECEIVE,
        }

    def run(self):
        while self.alive.isSet():
            try:
                # Queue.get with timeout to allow checking self.alive
                cmd = self.cmd_q.get(True, 0.1)
                self.handlers[cmd.type](cmd)
            except Queue.Empty as e:
                continue

    def join(self, timeout=None):
        self.alive.clear()
        threading.Thread.join(self, timeout)


- - -
import os


class MyConnection(object):

    def __init__(self):
        self.host = os.environ.get('MYHOST', 'default.example.com')
        self.url_base = 'https://' + self.host


class GetUsers(MyConnection):

    def __init__(self):
        super(GetUsers, self).__init__()

    @classmethod
    def get_save_directory(cls):
        return os.path.join(os.path.normpath('/tmp'), cls.__name__)

  • « OpenShift PHP Drupal PHPMyAdmin DIY Tomcat
  • ruby rvm install chef avoid sudo »

Published

Jun 30, 2014

Category

python

~104 words

Tags

  • communication 1
  • concurrency 10
  • control 6
  • external 5
  • inherit 2
  • python 180
  • queue 3
  • super 3
  • threading 3
  • through 2