threading.Event看起来很慢

时间:2015-07-24 14:01:22

标签: python multithreading python-2.7 python-multithreading

我目前正在实施一个高度线程化的应用程序,我对threading.Eventthreading.Condition和其他人存在速度问题。

我的申请中最受批评的部分可归纳为:

  • 一个线程通过套接字(消费者)处理异步发送消息
  • 一个线程正在添加要通过套接字(生产者)发送的内容。

我测试了许多方法(使用Queue.Queuethreading.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结果:

enter image description here

有没有办法让它更快?

0 个答案:

没有答案