長いファイルの読み取りのように、完了するまでに時間がかかるループがあるとします。どのようにすれば、一定時間x
(ミリ秒?) ごとに「何らかのコード」を実行できますか?
while inFile.readable():
line = inFile.readline()
print(line) # I want to do this every few seconds
演習として、スレッド化とラムダを使用してこれを行いたいと思います。
長いファイルの読み取りのように、完了するまでに時間がかかるループがあるとします。どのようにすれば、一定時間x
(ミリ秒?) ごとに「何らかのコード」を実行できますか?
while inFile.readable():
line = inFile.readline()
print(line) # I want to do this every few seconds
演習として、スレッド化とラムダを使用してこれを行いたいと思います。
これを行うには、何かを最後に印刷した時間を追跡します。
last = time.time()
while inFile.readable():
line = inFile.readLine()
now = time.time()
if now - last > 2: # seconds
print("time up!")
last = now
ファイルの読み取りに 2 秒以上かかる場合、そのループはtime up!
2 秒ごとに出力されます。
APScheduler を調べると、特定の間隔で Python コードを実行するための非常に単純な cron のようなインターフェイスがあります。
http://packages.python.org/APScheduler/
私は自分のプロジェクトのタスクをスケジュールするためにそれを使用しています。ジョブを保存する他の方法が必要な場合は、非常に安定してテストされており、非常に簡単に拡張できます。
うーん、これは私があなたの質問に戻ったので、あなたが望むものには少しやり過ぎですが、他の人にとって他の同様の状況に役立つ可能性があるので、私はそれを残します.
例えば:
import thread, time
def takes_a_while():
def print_status():
while True:
print i # print current i every two seconds
time.sleep(2)
status_thread = thread.start_new_thread(print_status, ())
for i in xrange(10000000):
print '*',
time.sleep(0.1)
status_thread.exit()
takes_a_while()
デコレータまたはコンテキストを使用すると、より適切に実行できますが、アイデアは得られました。