我有一个问题,在python中使用twisted来并发访问列表。 我有一个将数据添加到列表的扭曲类,以及每4秒调用一次的方法。这将它作为列表的元素并进行一些操作。 我担心从ossPeriodic和dataReceived都访问相同的列表会产生一致性问题。 这是代码:
ossStorage=[]
def ossPeriodic():
for i in ossStorage:
ossStorage.remove(i)
db.insertDataToDb(i)
reactor.callLater(4, ossPeriodic)
class OSS(Protocol):
def dataReceived(self, data):
account = pickle.loads(data)
ossStorage.append(account)
def main():
ossFactory = Factory()
ossFactory.protocol = OSS
reactor.listenTCP(50000, ossFactory)
reactor.callLater(4, ossPeriodic)
reactor.run()
我应该使用锁或类似的东西吗? 谢谢!
答案 0 :(得分:3)
你在使用线程吗?如果没有,则您没有对列表的并发访问权。
通常,使用Twisted的应用程序不使用线程。 Twisted的异步性质在单个线程中执行,按顺序处理每个事件。异步性质提供类似并发的行为,例如并行处理许多网络连接,但每个回调函数在调用下一个之前运行完成。