2017-07-31 9 views
0

更新された値を印刷してCSVファイルに保存しようとしています。私はスレッドを使用して、印刷は1秒ごとに行われますが、1秒ごとに印刷されるのと同じ値が出力されます。助けてもらえますか?Pythonスレッドを使用して変数を更新しました

import urllib.request, urllib.parse, urllib.error 
import json 
import threading 
import time 

localtime = time.asctime(time.localtime(time.time())) 



url = 'api' 

uh = urllib.request.urlopen(url) 
data = uh.read().decode() 

js =json.loads(data) 


def last_price(): 
    threading.Timer(1.0, last_price).start() 
    print(js['last']) 
    print(localtime) 


last_price() 

答えて

1

変数jsは現在1回だけ評価されています。毎秒APIにクエリを実行するには、タイマーによって実行されている関数内でクエリコードを移動します。

url = 'api' 

def last_price(): 
    localtime = time.asctime(time.localtime(time.time())) 
    uh = urllib.request.urlopen(url) 
    data = uh.read().decode() 
    js = json.loads(data) 
    print(js['last']) 
    print(localtime) 
    threading.Timer(1.0, last_price).start() 

last_price() 
+0

これは良い方法ですが、Pythonがすべての関数内のコード、それは技術的に1分以上の時間がかかります...(私は問題ではないと言います) –

+0

ありがとうございました。まだここのnoob ... thx! – Phum

+0

@ArthurSpoonあなたは正しいですが、最初にタイマーを起動すると、たとえばAPIが応答しなくなり、長い間あなたをブロックした場合、多くのスレッドが生成される危険があります。ミリ秒の精度が重要でない場合は、処理は不要なオーバーヘッドになります。 – Yigal

関連する問題