Twisted和python列表并发访问

时间:2013-03-20 21:59:14

标签: python list python-2.7 twisted

我有一个问题,在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()

我应该使用锁或类似的东西吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

你在使用线程吗?如果没有,则您没有对列表的并发访问权。

通常,使用Twisted的应用程序不使用线程。 Twisted的异步性质在单个线程中执行,按顺序处理每个事件。异步性质提供类似并发的行为,例如并行处理许多网络连接,但每个回调函数在调用下一个之前运行完成。