私は、特定のファイルリストの変更を監視して対応するマルチスレッドアプリケーションを作成しました。 Watch
クラスはファイルサイズを取得し、最初の呼び出し時に変数をsize
に設定します。その後、数秒後に再びファイルのサイズが取得され、以前のサイズと比較され、変更された場合は、size
がファイルの現在のサイズに設定されます。さらに、threading.Thread
のサブクラスであるWatchWorker
クラスがあります。 Watch
クラスを利用するWatchWorker
は、与えられたファイルを '見る'。マルチスレッドアプリケーションのメインスレッドがCtrl + Cに反応しないのはなぜですか?
ここに実際の問題があります。 私が書いたコードは動作しており、変更が検出されたときにユーザーに通知します。しかし、Ctrl + Cを使用してアプリケーションから終了しようとすると応答がありません。私はWindows上にいる。
コード:
import time
import threading
import os
class Watch(object):
def __init__(self, path, time=5):
self.path = path
self.time = time
self.size = os.stat(path).st_size
def loop(self):
while True:
time.sleep(self.time)
size = os.stat(self.path).st_size
if size != self.size:
self.size = size
print "Change detected in file {}".format(self.path)
class Watch_Worker(threading.Thread):
def __init__(self, path, *args, **kwargs):
super(Watch_Worker, self).__init__(*args, **kwargs)
self.path = path
def run(self):
super(Watch_Worker, self).run()
Watch(self.path).loop()
def main(*args):
for i in args:
thrd = Watch_Worker(path=i)
thrd.start()
print 'Watching ' + i
print "From main thread"
if __name__ == '__main__':
main('blah.js', 'cs.c', 'ab.rb')
編集
os.stat('somefile.ext').st_size)
生成された値を比較するためのコードを変更し。
これはGoogleにとっては珍しいことではありません。回答が必要な場合は、最小限の実例(コード)を提示する必要があります。 – PyNEwbie
すべてのファイルを定期的に読み込むのは、非常にリソースを消費します。最初に修正日を確認するか、特定のファイルシステムウォッチャーを使うべきだと思っています –
@hege_hegedus私は実際にはグラントウォッチのようなものを作ろうとしています。しかし、すぐにファイルの変更時刻を確認するためにコードを更新します。ありがとう:) –