【发布时间】:2017-01-11 20:18:50
【问题描述】:
在 Windows 上使用 Python 2.7,并将使用支持真正多线程的 Jython。 sendMessage 方法用于接收来自特定客户端的消息,并且客户端可以将相同的消息发送给其他几个客户端(这是receivers 的参数,receivers 是一个列表)。方法receiveMessage用于接收来自其他客户端的特定客户端的消息。
问题是我是否需要方法sendMessage 和receiveMessage 的任何锁?我认为没有必要,因为即使客户端 X 正在接收其消息,另一个客户端 Y 也可以附加到消息池以将消息传递给客户端 X。我认为对于 defaultdict/list,附加/弹出是既原子又不需要保护。
如果我错了,请随时纠正我。
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
【问题讨论】:
标签: python multithreading python-2.7 jython