From c6d3deea365f62d83a1c9d967eff00eafa2af3e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@ericsson.com> Date: Thu, 4 Apr 2024 15:10:41 +0200 Subject: [PATCH] faster CoolAMQP --- CHANGELOG.md | 3 ++- coolamqp/attaches/consumer.py | 12 ++++++------ coolamqp/attaches/declarer.py | 5 ++--- coolamqp/attaches/utils.py | 6 +++--- coolamqp/clustering/cluster.py | 2 +- coolamqp/framing/compilation/content_property.py | 4 ++-- coolamqp/framing/compilation/textcode_fields.py | 10 +++++----- coolamqp/objects.py | 4 ++-- coolamqp/uplink/handshake.py | 2 +- coolamqp/uplink/listener/epoll_listener.py | 3 +-- coolamqp/uplink/listener/socket.py | 10 +++++----- 11 files changed, 30 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee83991..4a1d0f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,4 +4,5 @@ have been made so far, between releases. # v1.3.1 -* coolamqp.objects.Callable made threadsafe (fixes #22) \ No newline at end of file +* coolamqp.objects.Callable made threadsafe (fixes #22) +* speed up (lots of if len(data) == 0 replaced with if not data) diff --git a/coolamqp/attaches/consumer.py b/coolamqp/attaches/consumer.py index d597b89..00fbeb3 100644 --- a/coolamqp/attaches/consumer.py +++ b/coolamqp/attaches/consumer.py @@ -551,7 +551,7 @@ class MessageReceiver(object): :return: callable/0 """ - def callable(): + def clbl(): if self.state == 3: return # Gone! @@ -566,7 +566,7 @@ class MessageReceiver(object): else: self.consumer.method(BasicReject(delivery_tag, True)) - return callable + return clbl def on_head(self, frame): assert self.state == 1 @@ -574,13 +574,13 @@ class MessageReceiver(object): self.message_size = self.data_to_go = frame.body_size self.state = 2 - if self.header.body_size == 0: + if not self.header.body_size: # An empty message is no common guest. It won't have a BODY field # though... self.on_body(EMPTY_MEMORYVIEW) # trigger it manually def on_basic_deliver(self, payload): - assert self.state == 0 + assert not self.state self.bdeliver = payload self.state = 1 @@ -597,7 +597,7 @@ class MessageReceiver(object): self.offset += len(payload) else: # new one - if self.data_to_go == 0: # special case - single frame message + if not self.data_to_go: # special case - single frame message self.body = payload else: self.body = memoryview(bytearray(self.message_size)) @@ -609,7 +609,7 @@ class MessageReceiver(object): assert self.data_to_go >= 0 - if self.data_to_go == 0: + if not self.data_to_go: ack_expected = not self.consumer.no_ack # Message A-OK! diff --git a/coolamqp/attaches/declarer.py b/coolamqp/attaches/declarer.py index ace6b99..e308deb 100644 --- a/coolamqp/attaches/declarer.py +++ b/coolamqp/attaches/declarer.py @@ -297,7 +297,7 @@ class Declarer(Channeler, Synchronized): if persistent: if obj not in self.declared: - self.declared.add(obj) # todo access not threadsafe + self.declared.add(obj) self.left_to_declare.append(Operation(self, obj, fut, span, enqueued_span)) self._do_operations() @@ -311,8 +311,7 @@ class Declarer(Channeler, Synchronized): To be called when it's possible that something can be done """ - if (self.state != ST_ONLINE) or len(self.left_to_declare) == 0 or ( - self.in_process is not None): + if self.state != ST_ONLINE or not len(self.left_to_declare) or self.in_process is not None: return self.in_process = self.left_to_declare.popleft() diff --git a/coolamqp/attaches/utils.py b/coolamqp/attaches/utils.py index b331cd6..33dbfdf 100644 --- a/coolamqp/attaches/utils.py +++ b/coolamqp/attaches/utils.py @@ -124,11 +124,11 @@ class AtomicTagger(object): if you put something that isn't a ConfirmableRejectable, you won't get bitten until you call .ack() or .nack(). """ - assert tag >= 0 + assert tag opt = (tag, obj, span) with self.lock: - if len(self.tags) == 0: + if not self.tags: self.tags.append(opt) elif self.tags[-1][0] < tag: self.tags.append(opt) @@ -154,7 +154,7 @@ class AtomicTagger(object): start = 0 # start and stop will signify the PYTHON SLICE parameters - if tag > 0: + if tag: if multiple: # Compute the ranges diff --git a/coolamqp/clustering/cluster.py b/coolamqp/clustering/cluster.py index 2ef2d96..de021c5 100644 --- a/coolamqp/clustering/cluster.py +++ b/coolamqp/clustering/cluster.py @@ -147,7 +147,7 @@ class Cluster(object): def fetch(): try: - if timeout == 0: + if not timeout: return self.events.get_nowait() else: return self.events.get(True, timeout) diff --git a/coolamqp/framing/compilation/content_property.py b/coolamqp/framing/compilation/content_property.py index a6f33df..0149db2 100644 --- a/coolamqp/framing/compilation/content_property.py +++ b/coolamqp/framing/compilation/content_property.py @@ -91,7 +91,7 @@ def _compile_particular_content_property_list_class(zpf, fields): mod.append(SPACER) - if len(present_fields) == 0: + if not len(present_fields): slots = u'' else: slots = (u', '.join( @@ -104,7 +104,7 @@ def _compile_particular_content_property_list_class(zpf, fields): FFN = u', '.join(format_field_name(field.name) for field in present_fields) - if len(present_fields) > 0: + if len(present_fields): mod.append(INIT_I % (FFN,)) for field in present_fields: diff --git a/coolamqp/framing/compilation/textcode_fields.py b/coolamqp/framing/compilation/textcode_fields.py index 0d5ea0f..393b45b 100644 --- a/coolamqp/framing/compilation/textcode_fields.py +++ b/coolamqp/framing/compilation/textcode_fields.py @@ -94,7 +94,7 @@ def get_from_buffer(fields, prefix='', indent_level=2, remark=False): to_struct = [] def emit_bits(): - if len(bits) == 0: + if not len(bits): return if remark: print('Bits are being banged') @@ -115,7 +115,7 @@ def get_from_buffer(fields, prefix='', indent_level=2, remark=False): def emit_structures(dont_do_bits=False): # type: (bool) -> dict if not dont_do_bits: emit_bits() - if len(to_struct) == 0: + if not len(to_struct): return {} fffnames = [a for a, b in to_struct if a != u'_'] # skip reserved ffffmts = [b for a, b in to_struct] @@ -141,7 +141,7 @@ def get_from_buffer(fields, prefix='', indent_level=2, remark=False): if BASIC_TYPES[field.basic_type][0] is not None: # static type shit has - assert len(bits) == 0 + assert not len(bits) if field.reserved: to_struct.append( @@ -155,8 +155,8 @@ def get_from_buffer(fields, prefix='', indent_level=2, remark=False): elif field.basic_type == u'table': # oh my god structers.update(emit_structures()) - assert len(bits) == 0 - assert len(to_struct) == 0 + assert not len(bits) + assert not len(to_struct) emit("%s, delta = deframe_table(buf, offset)", fieldname) emit("offset += delta") diff --git a/coolamqp/objects.py b/coolamqp/objects.py index b396d35..5949d9c 100644 --- a/coolamqp/objects.py +++ b/coolamqp/objects.py @@ -251,8 +251,8 @@ class Queue(object): self.auto_delete = auto_delete self.exclusive = exclusive - self.anonymous = len( - self.name) == 0 # if this queue is anonymous, it must be regenerated upon reconnect + self.anonymous = not len( + self.name) # if this queue is anonymous, it must be regenerated upon reconnect self.consumer_tag = self.name if not self.anonymous else uuid.uuid4().hex.encode( 'utf8') # bytes, consumer tag to use in AMQP comms diff --git a/coolamqp/uplink/handshake.py b/coolamqp/uplink/handshake.py index dfa6e25..163c099 100644 --- a/coolamqp/uplink/handshake.py +++ b/coolamqp/uplink/handshake.py @@ -120,7 +120,7 @@ class Handshaker(object): self.connection.frame_max = payload.frame_max self.connection.heartbeat = min(payload.heartbeat, self.heartbeat) self.connection.free_channels.extend(six.moves.xrange(1, ( - 65535 if payload.channel_max == 0 else payload.channel_max) + 1)) + 65535 if not payload.channel_max else payload.channel_max) + 1)) self.connection.watch_for_method(0, ConnectionOpenOk, self.on_connection_open_ok) diff --git a/coolamqp/uplink/listener/epoll_listener.py b/coolamqp/uplink/listener/epoll_listener.py index e84e5d0..d164fbf 100644 --- a/coolamqp/uplink/listener/epoll_listener.py +++ b/coolamqp/uplink/listener/epoll_listener.py @@ -74,8 +74,7 @@ class EpollListener(BaseListener): if event & select.EPOLLOUT: sock.on_write() # I'm done with sending for now - if len(sock.data_to_send) == 0 and len( - sock.priority_queue) == 0: + if not len(sock.data_to_send) and not len(sock.priority_queue): self.epoll.modify(sock.fileno(), RO) except SocketFailed as e: diff --git a/coolamqp/uplink/listener/socket.py b/coolamqp/uplink/listener/socket.py index d149e17..afc9198 100644 --- a/coolamqp/uplink/listener/socket.py +++ b/coolamqp/uplink/listener/socket.py @@ -100,7 +100,7 @@ class BaseSocket(object): except (IOError, socket.error) as e: raise SocketFailed(repr(e)) - if len(data) == 0: + if not data: raise SocketFailed('connection gracefully closed') try: @@ -109,7 +109,7 @@ class BaseSocket(object): raise SocketFailed(repr(e)) def wants_to_send_data(self): # type: () -> bool - return not (len(self.data_to_send) == 0 and len(self.priority_queue) == 0) + return not (not self.data_to_send and not self.priority_queue) def on_write(self): # type: () -> None """ @@ -123,8 +123,8 @@ class BaseSocket(object): return False while True: - if len(self.data_to_send) == 0: - if len(self.priority_queue) == 0: + if not self.data_to_send: + if not self.priority_queue: return True else: self.data_to_send.appendleft(self.priority_queue.popleft()) @@ -147,7 +147,7 @@ class BaseSocket(object): # Looks like everything has been sent self.data_to_send.popleft() # mark as sent - if len(self.priority_queue) > 0: + if self.priority_queue: # We can send a priority pack self.data_to_send.appendleft(self.priority_queue.popleft()) -- GitLab