在 Windows 上使用 Python 2.7,并将使用支持真正多线程的 Jython。 sendMessage 方法用于接收来自特定客户端的消息,客户端可能会向其他几个客户端发送相同的消息(这就是参数 receivers 的作用,并且receivers 是一个列表)。 receiveMessage 方法用于接收从其他客户端发送给特定客户端的消息。
问题是我是否需要为方法 sendMessage 和 receiveMessage 加锁?我认为没有必要,因为即使客户端 X 正在接收其消息,另一个客户端 Y 附加到消息池以将消息传递给客户端 X 也是完美的。我认为对于 defaultdict/list,append/pop 是既原子又不需要保护。
如果我错了,请随时纠正我。
from collections import defaultdict
class Foo:
def __init__(self):
# key: receiver client ID, value: message
self.messagePool = defaultdict(list)
def sendMessage(self, receivers, message):
# check valid for receivers
for r in receivers:
self.messagePool[r].append(message)
def receiveMessage(self, clientID):
result = []
while len(self.messagePool[clientID]) > 0:
result.append(self.messagePool[clientID].pop(0))
return result
请您参考如下方法:
我建议使用 Queue 而不是 list。它是为带锁的线程中的 append\pop 而设计的。
