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
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)
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
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
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