2017-02-28 1 views
0

n秒ごとにプロセスを実行する必要があります。私はThreading.timerがそれを行う最善の方法だと考えました。しかし、私がコマンドを実行すると、n秒ごとに実行されるのではなく、指定されたnおよびループよりもずっと短い時間で繰り返し実行され続けます。ここに私のコードは次のとおりです。時間がかかるプロセスをn秒ごとに実行するにはどうすればいいですか?

#!/usr/bin/python 

import threading 
import time 

brake = 10 
k = int(5) 

def printit(): 
    for x in range(k): 
     threading.Timer((int(brake)), printit).start() 
     print "Hello World!" 
     #i have a longer process here, it takes a few seconds to run 
     #i give more than double of the time needed to run it 
printit() 

私がしたいことは、次のとおりです。こんにちは、世界を5回、それぞれ10秒のブレーキで印刷します。しかし、それはそれをより速く印刷し、止まらない。 いくつかのパラメータがないか、実行しようとしているプロセスに問題がありますか?また、n秒ごとに証明を実行する他の簡単な方法にも感謝します。

答えて

1

(キーワードとして印刷)ので、睡眠は良いアイデアがあり、以降のためasyncio

import asyncio 

def do_task(end_time, loop): 
    print('hello world!') 
    if (loop.time() + 1.0) < end_time: 
     loop.call_later(1, do_task, end_time, loop) 
    else: 
     loop.stop() 

loop = asyncio.get_event_loop() 

end_time = loop.time() + 10.0 
loop.call_soon(do_task, end_time, loop) 

loop.run_forever() 
loop.close() 
0

あなたはあなたが本当に10秒間停止したいのpython

import time 

k = int(5) 

def printit(): 
    for x in range(k): 
     time.sleep(5) 
     print "Hello World!" 
     #i have a longer process here, it takes a few seconds to run 
     #i give more than double of the time needed to run it 
printit() 
+0

私のプロセスは実行に数秒かかるので、私がこれを実行すると、5秒間待って、私のプロセスを(何時間かかるのですか?)次回起動時には5秒+プロセスを実行するのにかかった時間。 – TheAdam122

0

にちょうどtimeでそれを行うことができます。

time.sleep(brake) 

タイマー方式ですべての操作を別のスレッドで実行したい場合は、プリント機能とタイマー機能を分ける必要があります。ただし、これは "Hello World!"を出力します。 10秒が経過した後、同時に全部で5回。あなたがpy3.4を使用している場合はpython2.xを使用しているように見えるが

import threading 
import time 

brake = 10 
k = 5 

def printit(): 
    for x in range(k): 
     threading.Timer(brake, long_process, args=('Hello World!',)).start() 

def long_process(item): 
    print(item) 
    #i have a longer process here, it takes a few seconds to run 
    #i give more than double of the time needed to run it 


printit() 
0

おかげでありますすべての答えは、しかし、平均時間に私はそれを行うのに最適な方法を考え出し:

import time 

a=2 
b=5 

for x in range(a): 
    start = time.time() 
    print "Hello World!" 
    time.sleep(3) 
    run = (-(start)+time.time()) 
    time.sleep(int(b)-(run)) 

その私が繰り返しn秒ごとにプロセスを実行するために知っている唯一の方法。単純にtime.sleepを使って簡単に行うこともできますが、プロセスが長い場合は、プロセスが実行されるまでにスリープ時間を短縮する必要があります。

関連する問題