2017-07-31 73 views
0

我试图打印更新的值并将其存储在CSV文件中。我使用线程和打印将是每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目前仅评估一次。如果您想查询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来执行所有的代码在函数内部,从技术上讲,这在一分钟之内......(我不会说这是一个问题) –

+0

谢谢你,在走开并思考它一秒钟后意识到这一点。仍然是一个小菜... thx! – Phum

+0

@ArthurSpoon你是对的,但是如果你在开始的时候触发了定时器,那么如果你的API没有响应,并且很长一段时间阻塞了你,你就冒着产生许多线程的风险。如果毫秒精度不是高优先级,那么处理这将是不必要的开销。 – Yigal