当时我只是在做一个python myprogra.py &
,让这个程序完成它的任务:
import urllib2
import threading
import json
url = 'https://something.com'
a = []
def refresh():
# refresh in 5 minutes
threading.Timer(300.0, refresh).start()
# open url
try:
data = urllib2.urlopen(url).read(1000)
except:
return 0
# decode json
q = data.decode('utf-8')
q = json.loads(q)
# store in a
a.append(q['ticker'])
if len(a) > 288:
a.pop()
truc = json.dumps(a)
f = open('ticker.json', 'w')
f.write(truc)
f.close()
refresh()
我有两个问题:
既然我没有在函数的开头写global a
,它是怎么工作的
我应该用一个cron来代替我现在做的吗?(我使用的是debian服务器)
以您的方式访问变量
a
是没有问题的,因为您从未在refresh
函数中为其赋值。访问它的方式与访问url
变量或甚至访问json
导入的方式相同。如果要赋值给a
(而不是对其调用append
这样的方法),那么您将创建一个隐藏全局a的局部变量。global
关键字避免为赋值创建局部变量。在使用睡眠程序还是cron程序取决于您,但请记住以下几点:
a
中保持请求之间的状态。如果要使用cron并多次调用程序,则需要将此状态存储在其他位置。在相关问题 更多 >
编程相关推荐