Python 线程。事件看起来非常慢

Python 线程。事件看起来非常慢,python,multithreading,python-2.7,python-multithreading,Python,Multithreading,Python 2.7,Python Multithreading,我目前正在实现一个高度线程化的应用程序,我遇到了线程化.Event、线程化.Condition和其他问题 我的应用程序中最关键的部分可以总结为: 一个线程正在通过套接字(使用者)处理异步发送消息 一个线程正在添加要通过套接字(生产者)发送的内容 我测试了许多方法(使用Queue.Queue,threading.Condition等),目前,最好的结果基于threading.Event,如下所示: class ConnectionHandler(): """ Attribute

我目前正在实现一个高度线程化的应用程序,我遇到了
线程化.Event
线程化.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结果:


有什么方法可以让这更快吗?

您有没有研究过
多处理
?由于全局解释器锁定,线程通常速度较慢,所有线程仍在一个内核上运行。这是我的
\u loop\u send
实现的一个简短概述。在它上使用
多处理
将非常困难(没有专门为此设计的)。我想知道是否有解决这个问题的方法。但我已经在考虑:)回到使用队列或您自己的事实上的队列实现,并从那里进行优化。如果生产者在消费者清空
\u send\u queue
之后但在后者调用
clear()
之前将数据排队并设置事件标志,则所示的事件实现是不正确的(竞赛)。