4

1秒間に指定した回数ステートメントを実行するコードを書きたい.

ここでは、レートを毎秒30にしたい

関数を 1 秒あたり 30 回 60 秒間実行したい場合は、速度 = 30/秒、持続時間 = 60 秒を意味します

同じことをするためにPythonで利用できるAPIは誰でも教えてもらえますか?

4

4 に答える 4

2

schedモジュールはまさにこれを目的としています:

from __future__ import division
import sched
import time

scheduler = sched.scheduler(time.time, time.sleep)

def schedule_it(frequency, duration, callable, *args):
    no_of_events = int( duration / frequency )
    priority = 1 # not used, lets you assign execution order to events scheduled for the same time
    for i in xrange( no_of_events ):
        delay = i * frequency
        scheduler.enter( delay, priority, callable, args)

def printer(x):
    print x

# execute printer 30 times a second for 60 seconds
schedule_it(1/30, 60, printer, 'hello')
scheduler.run()

スレッド化された環境では、 の使用を次のsched.schedulerように置き換えることができますthreading.Timer

from __future__ import division
import time
import threading

def schedule_it(frequency, duration, callable, *args, **kwargs):
    no_of_events = int( duration / frequency )
    for i in xrange( no_of_events ):
        delay = i * frequency
        threading.Timer(delay, callable, args=args, kwargs=kwargs).start()

def printer(x):
    print x

schedule_it(5, 10, printer, 'hello')
于 2012-08-27T04:04:36.670 に答える
0

あなたが望むことをするために使用time.time()することができます:

import time

def your_function():
    # do something...

while True:
    start = time.time() # gives current time in seconds since Jan 1, 1970 (in Unix)
    your_function()
    while True:
        current_time = time.time()
        if current_time - start >= 1.0/30.0:
            break

これにより、実行に時間がかかるyour_function場合でも、の呼び出し間の遅延が1/30 秒に非常に近くなります。your_function

もう 1 つの方法があります。Python の組み込みスケジューリング モジュールsched. 使ったことがないので参考にはなりませんが、参考にしてください。

于 2012-08-14T08:48:43.150 に答える
0

使ってみてくださいthreading.Timer:

def hello():
    print "hello, world"

t = Timer(30.0, hello)
t.start() # after 30 seconds, "hello, world" will be printed
于 2012-08-14T06:33:29.300 に答える
-1

しばらく費やした後、それをうまく行う方法を発見しました。Pythonでマルチプロセッシングを使用してそれを達成しました。これが私の解決策です

#!/usr/bin/env python
from multiprocessing import Process
import os
import time
import datetime
def sleeper(name, seconds):
   time.sleep(seconds)
   print "PNAME:- %s"%name


if __name__ == '__main__':
   pros={}
   processes=[]
   i=0
   time2=0
   time1=datetime.datetime.now()
   for sec in range(5):
        flag=0
        while flag!=1:
                time2=datetime.datetime.now()
                if (time2-time1).seconds==1:
                        time1=time2
                        flag=1
                        print "Executing Per second"
                        for no in range(5):
                                i+=1
                                pros[i] = Process(target=sleeper, args=("Thread-%d"%i, 1))
                        j=i-5
                        for no in range(5):
                                j+=1
                                pros[j].start()
                        j=i-5
                        for no in range(5):
                                j+=1
                                processes.append(pros[j])
   for p in processes:
        p.join()
于 2012-08-14T12:00:35.590 に答える