0

2 秒ごとに 1 回データベースからデータをフェッチし、結果を複数のスレッドを作成して返されたデータを処理する関数に渡すスクリプトを実行しています。

私のクエリは、両方ともデータベースでマークされているアイテムを返しis_deleted = Falseます。以下のコードでは、データベースに 1 つのメンバーがあり、それらを削除済みとしてマークしたり、実際に削除したりした場合、 がmember.get_member()で処理する「なし」を返すことを期待していif statementます。ただし、問題は、スクリプトが既に実行されている間にそのメンバーをデータベースから削除しても、「データ」が返され、「なし」が返されることです。スクリプトを停止して再度実行すると、「なし」が返されるため、正しいデータがフェッチされます

sqlAlchemy 0.8でPython3.2を実行しています

def main():
    while True:
        time.sleep(2)
        member = Member()
        myData, instance_counter = member.get_member()
        if myData == None:
            print("No member registered yet:", get_time_now())
        else:
            myqueuing(instance_counter, myData)   
            dbase.session.commit()

if __name__ == '__main__':
    main()
4

1 に答える 1

0

試行錯誤の末に答えを見つけました。以下に示すように、データベース クエリを再度実行session.close_all()する直前に実行します。

確実ではないのはsession.close_all()、フェッチされたデータを処理するために呼び出されたスレッドによって実行されているセッションも閉じるかどうかです。それらのセッションを終了する場合は、製図板に戻るので、あなたの助けが必要です.

def main():
    while True:
        time.sleep(2)

        #This solved it but am not sure if it will close other sessions 
        #that have been spawned by the threads
        dbase.session.close_all()  

        member = Member()
        myData, instance_counter = member.get_member()
        if myData == None:
            print("No member registered yet:", get_time_now())
        else:
            myqueuing(instance_counter, myData)   
            dbase.session.commit()

if __name__ == '__main__':
    main()
于 2013-03-29T20:17:20.007 に答える