2016-05-06 6 views
0

5秒ごとに関数を実行します。 このコードは機能します:Pythonは、前の試行からの情報を使って5秒ごとに関数を実行します。

import threading 
def notify(): 
    threading.Timer(5.0, notify).start() 

notify() 

以前の実行のパラメータが必要な場合はどうなりますか? 私はこれを試してみました:

import threading 
def notify(since): 
    threading.Timer(5.0, notify(since)).start() 
# initial_id is just an integer, eg 423455677 
notify(initial_id) 

私はエラーを取得:

Traceback (most recent call last): 
File "/Users/paulyu/anaconda/lib/python3.4/threading.py", line 911, in _bootstrap_inner 
self.run() 
File "/Users/paulyu/anaconda/lib/python3.4/threading.py", line 1177, in run 
self.function(*self.args, **self.kwargs) 
TypeError: notify() missing 1 required positional argument: 'since' 

ハウそれを修正しますか? あなたのアドバイスは大歓迎です。 ありがとう ポール

+0

入力とエラーの間には相関がありません。それ以来のことは何ですか? –

+0

これは通知機能のための番号です。最初の実行では、notify()にパラメータとして数値を代入します。この数値は他の関数によって取得されます。 –

+0

2番目の例では、* since *パラメータを指定しないでnotifyを呼び出したことを示していますが、実際には何を達成しようとしていますか? –

答えて

0

何らかの種類の状態を覚えておく必要がある場合は、通常、クラスが必要です。

import threading 

class Notifier: 

    def __init__(self, since): 
     self.since = since 

    def notify(self): 
     print(self.since) 
     self.since += 1 
     threading.Timer(2.0, self.notify).start() 

Notifier(123).notify() 
+0

このコードは質問に答えるかもしれませんが、それがどのように動作し、いつ使用するかを説明するいくつかのコンテキストを含める方が良いでしょう。コードのみの回答は長期的には有用ではありません。 – Bono

+0

@Bonoはそれが良いですか?説明することはあまりありません。 –

+0

@Alexありがとう!私はクラスを作成し、それをテストしました。非常にうまくいきます。私がクラスを使うのは初めてです。いつ、なぜそれを使うのかを理解し始める。 :) –

関連する問題