0

ツイストを使用したPythonでのリストへの同時アクセスについて質問があります。リストにデータを追加するねじれたクラスと、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()

ロックなどを使用する必要がありますか?ありがとうございました!

4

1 に答える 1

3

スレッドを使用していますか?そうでない場合は、リストへの同時アクセスがありません。

通常、Twisted を使用するアプリケーションはスレッドを使用しません。Twisted の非同期の性質は、各イベントを順番に処理する単一のスレッドで実行されます。非同期の性質により、多くのネットワーク接続を並行して処理するなど、同時実行のような動作が可能になりますが、各コールバック関数は次の関数が呼び出される前に完了するまで実行されます。

于 2013-03-20T22:08:16.760 に答える