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()
之前将数据排队并设置事件标志,则所示的事件实现是不正确的(竞赛)。