Example #1
0
    def _get(self, poll = False, tail = False):

        wait = not poll

        # wait for something to come in if we're not polling
        while wait and self.empty():
            wait = self.wait_one()

        if self.empty():
            return None

        if not self._item_list:
            if tail:
                return None
            self._item_list.append(self.__alloc())

        self._item_time[coro.current_id()] = time.time()
        self._item_out  += 1
        self._out_total += 1

        if tail:
            o = self._item_list[0]
            del(self._item_list[0])
        else:
            o = self._item_list.pop()

        return o
Example #2
0
    def get(self, *args, **kwargs):
        '''get

        Return an object from the queue, wait/yield if one is not available
        until it becomes available.

        Note: when the queue has a timeout defined, the return value
              will be None when the timeout expires and no object has
              become available.

        QueueDeadlock raised if an attempt is made to get an object and
        the current thread already has fetched an object from the queue
        which has yet to be returned.
        '''
        if coro.current_id() in self._item_thrd:
            obj = self._item_thrd[coro.current_id()]
            raise QueueDeadlock(obj, self._item_save[obj])

        return super(SafeQueue, self).get(*args, **kwargs)
Example #3
0
    def put(self, o):
        id = coro.current_id()
        if id in self._item_time:
            out_time = time.time() - self._item_time[id]
            self._out_time += out_time
            self._out_max = max(self._out_max, out_time)
            del(self._item_time[id])

        self._item_out -= 1
        bisect.insort(self._item_list, o)

        self.wake_one()
        return None
Example #4
0
	def __init__ (self, **kwargs):
		self.username = kwargs.get('user',   '')
		self.password = kwargs.get('passwd', '')

		self.addresses = [(
			socket.AF_INET,
			(kwargs.get('host', '127.0.0.1'), kwargs.get('port', 3306)))]

		if kwargs.get('host') == 'localhost':
			self.addresses.append((socket.AF_UNIX, '/tmp/mysql.sock'))

		self._database = kwargs.get('db', '')
		self._init_cmd = kwargs.get('init_command', None)

		self._debug = kwargs.get('debug', 0) or (coro.current_id() < 0)

		self._connect_timeout = kwargs.get('connect_timeout', None)
		self._timeout         = kwargs.get('timeout', None)

		self._connected   = 0
		self._server_info = ''
		self._recv_buffer = ''

		self._rbuf = ''
		self._rlen = 0
		self._roff = 0
		self._rpac = []

		self._latest_fields = []
		self._latest_rows   = []
		self._nfields       = 0
		self._affected      = 0
		self._insert_id     = 0
		self._warning_count = 0
		self._message       = None

		self.socket = None
		self._lock  = 0
		self._max_reconnect = MAX_RECONNECT_RETRY

		if not self._debug:
			self._timer_cond = coro.coroutine_cond()
			self._lock_cond  = coro.coroutine_cond()

		self.converter = {}
		self.errorhandler = handle_error_sanely

		from MySQLdb import converters
		from weakref import proxy

		self.charset = self.character_set_name().split('_')[0]

		self.converter = converters.conversions.copy()
		self.converter[types.StringType]  = self.string_literal
		self.converter[types.UnicodeType] = self.unicode_literal
		#
		# preconverter set by upper layer, blech, use it for string types.
		#
		self._preconv = kwargs.get('conv', None)
		#
		# check switch for C implementation.
		#
		if kwargs.get('fast', False) and mysqlfuncs:
			self.read_packet = self._fast_read_packet
			self.cmd_query   = self._fast_cmd_query

		return None
Example #5
0
    def __init__ (self, **kwargs):
        self.username = kwargs.get('user',   '')
        self.password = kwargs.get('passwd', '')

        self.addresses = [(
            socket.AF_INET,
            (kwargs.get('host', '127.0.0.1'), kwargs.get('port', 3306)))]

        if kwargs.get('host') == 'localhost':
            self.addresses.append((socket.AF_UNIX, '/tmp/mysql.sock'))

        self._database = kwargs.get('db', '')
        self._init_cmd = kwargs.get('init_command', None)

        self._debug = kwargs.get('debug', 0) or (coro.current_id() < 0)

        self._connect_timeout = kwargs.get('connect_timeout', None)
        self._timeout         = kwargs.get('timeout', None)

        self._connected   = 0
        self._server_info = ''
        self._recv_buffer = ''

        self._rbuf = ''
        self._rlen = 0
        self._roff = 0
        self._rpac = []

        self._latest_fields = []
        self._latest_rows   = []
        self._nfields       = 0
        self._affected      = 0
        self._insert_id     = 0
        self._warning_count = 0
        self._message       = None

        self.socket = None
        self._lock  = 0

        self._reconnect_cmds = 0
        self._reconnect_exec = 0
        self._reconnect_maxr = MAX_RECONNECT_RETRY

        if not self._debug:
            self._timer_cond = coro.coroutine_cond()
            self._lock_cond  = coro.coroutine_cond()

        self.converter = {}
        self.errorhandler = handle_error_sanely

        from MySQLdb import converters
        from weakref import proxy

        self.charset = self.character_set_name().split('_')[0]

        self.converter = converters.conversions.copy()
        self.converter[types.StringType]  = self.string_literal
        self.converter[types.UnicodeType] = self.unicode_literal
        #
        # preconverter set by upper layer, blech, use it for string types.
        #
        self._preconv = kwargs.get('conv', None)
        #
        # check switch for C implementation.
        #
        if kwargs.get('fast', False) and mysqlfuncs:
            self.read_packet = self._fast_read_packet
            self.cmd_query   = self._fast_cmd_query

        return None