gpt4 book ai didi

python - 我是否需要锁定来保护我的代码中的多线程竞争条件

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:51 25 4
gpt4 key购买 nike

在 Windows 上使用 Python 2.7,并将使用支持真正多线程的 Jython。 sendMessage 方法用于接收来自特定客户端的消息,客户端可能会向其他几个客户端发送相同的消息(这就是参数 receivers 的作用,并且receivers 是一个列表)。 receiveMessage 方法用于接收从其他客户端发送给特定客户端的消息。

问题是我是否需要为方法 sendMessagereceiveMessage 加锁?我认为没有必要,因为即使客户端 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 而设计的。

关于python - 我是否需要锁定来保护我的代码中的多线程竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39314024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com