2

プログラムのメイン スレッドにメインループがあります (メインループは、ディスク I/O イベントを待機している DBusGMainLoop です)。イベント ハンドラが呼び出されるたびに、ファイルのコピーのために新しいスレッドが分配されます。この時点で奇妙なことが起こります。イベントが呼び出され、スレッド 1が開始されたとします。スレッド 1return os.listdir(path)は、2 番目のイベントが発生して2 番目のスレッドが開始されるまで、行 ' ' でブロックされます。その後、スレッド 1は正常に動作し続けますが、スレッド 2はブロックされます。また、Ctrl-C でメインループを中断すると、両方のスレッドが機能することにも気付きましたが、明らかにメイン スレッドはイベントの待機を停止します。

なぜこれが起こるのか、誰かが何かヒントを与えることができますか?

このコードは、メイン関数で実行されます。

mainloop = gobject.MainLoop()
mainloop.run()

これは、イベント ハンドラーが新しいスレッドを開始する場所です。

agent = CopyingAgent(mount_point)
agent.start()

これは、スレッドがブロックされているように見える方法です。

def sorted_listdir(self, path):
    return sorted(os.listdir(path))
4

0 に答える 0