我目前正在实施一个高度线程化的应用程序,我对threading.Event
,threading.Condition
和其他人存在速度问题。
我的申请中最受批评的部分可归纳为:
我测试了许多方法(使用Queue.Queue
,threading.Condition
等),目前,最佳结果基于threading.Event
,如下所示:
class ConnectionHandler():
"""
Attributes:
_is_alive (bool): thread stop condition
_event (threading.Event): sending event
_send_queue (list[str]): list of message to send over the socket
"""
# .../...
def _loop_send(self):
""" Target of the consumer thread """
while self._is_alive:
self._event.wait()
while self._send_queue and self._is_alive:
self.socket.sendall(self._send_queue.pop(0))
self._event.clear()
def send(self, element):
""" Function called by the producer thread """
self._send_queue.append(element)
self._event.set()
我的问题是send
被称为接近100k,并且真的慢。我描述了我的制作人,这里是PyCallGraph结果:
有没有办法让它更快?