0

さて、私はスケジューラに取り組んでおり、timeOut(3,print,'hello') のようなものを考えていました.3 秒ごとに hello を出力します.いくつかの方法を試しましたが、すべて失敗しました. また、1 つだけでなく他のタスクも実行する必要があるため、これに time.sleep を使用してもうまくいきません。

編集:必要なことを行う方法を見つけました。混乱して申し訳ありませんが、これで必要なことはうまくいきました。みんなに答えてくれてありがとう。

class test:
    def __init__(self):
         self.objectives = set()
    class Objective:
         pass
    def interval(self,timeout,function,*data):
        newObjective = self.Objective()
        newObjective.Class = self
        newObjective.timeout = time.time()+timeout
        newObjective.timer = timeout
        newObjective.function = function
        newObjective.repeate = True
        newObjective.data = data
        self.objectives.add(newObjective)
        return True
    def runObjectives(self):
         timeNow = time.time()
         for objective in self.objectives:
             timeout = objective.timer
             if objective.timeout <= timeNow:
                 objective.function(*objective.data)
                 if objective.repeate:
                     objective.timeout = timeNow + timeout
                     self.main()
                 else:
                     self.objectives.remove(objective)
                     print('removed')
    def main(self):
         while True:
             self.runObjectives()
4

1 に答える 1

0

標準ライブラリには、schedスケジューリングのために呼び出されるモジュールが含まれています。delayfuncコンストラクターパラメーターを使用して、さまざまな環境で動作するように適応させることができます。それを使用すると、質問は次のようになります。

def event():
    scheduler.enter(3, 0, event, ()) # reschedule
    print('hello')

これは、他のタスクをどのように実行するかによって異なります。イベントループを使用していますか? おそらく、同様のスケジューリングメカニズムがあります(少なくともtwistedhascallLaterGObjecthas timeout_add)。他のすべてが失敗した場合は、新しいスレッドを生成して、そこで asched.schedulerを実行できますtime.sleep

于 2013-09-16T06:58:33.103 に答える