2

現在のコードは次のとおりです。

def export_data(file):
    <runs the db2 database command to export tables to file>

def export_to_files(yaml):
    logger = logging.getLogger("export_to_files")
    thread1 = threading.Thread(target=export_data, args=[out_file1])
    thread1.start()
    thread2 = threading.Thread(target=export_data, args=[out_file2])
    thread2.start()
    thread1.join()
    thread2.join()

def main():
    export_to_files()

if __name__ == "__main__":
    main()

私の理解ではjoin()、呼び出しスレッドのみをブロックします。thread1.join()ただし、それが実行をブロックすることさえありませんでしたthread2。本質的に、コードは 1 つのスレッドのみを実行しますthread1

メインスレッドが両方の完了を待機している間に、両方のスレッドを同時に実行するにはどうすればよいですか?

編集:私は修正されたままです.2つのスレッドは実行されますが、実際にある時点で「実行」しているのは1つのスレッドだけのようです.

さらに詳しく説明すると、callable_methodはデータベースからデータを読み取り、ファイルに書き込みます。2 つのファイルが更新されているのがわかりますが (各スレッドが別のファイルに書き込みます)、一方のファイルはかなりの時間更新されていませんが、もう一方のファイルは現在の時刻に関して最新です。

使用されている接続オブジェクトはありません。クエリは、db2 コマンド ライン インターフェイスから実行されます。

4

3 に答える 3

0

目に見えるコードは問題ありませんが、目に見えない一部のコードはロックを使用しています。ロックはデータベース自体でも発生する可能性があります。

于 2013-08-17T15:28:35.057 に答える
0

これは、サンプル コードの実行可能なバージョンを示しています。

import time
import threading

def export_data(fileName):
    # runs the db2 database command to export tables to file
    while True:
        print 'If I were the real function, I would be writing to ' + fileName
        time.sleep(1)

thread1 = threading.Thread(target=export_data, args=[ 'out_file1' ])
thread2 = threading.Thread(target=export_data, args=[ 'out_file2' ])

thread1.start()
thread2.start()

thread1.join()
thread2.join()
于 2013-08-16T20:50:24.613 に答える