使用python每5分钟保存一次数据

时间:2014-03-18 07:41:57

标签: python json debian urllib2

当时我正在做一个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服务器)

1 个答案:

答案 0 :(得分:1)

以您的方式访问变量a没有问题,因为您从未在refresh函数中分配变量url。它的访问方式与json变量的访问方式相同,甚至可以访问a导入。如果您要分配给append(而不是在其上调用诸如global之类的方法),那么您将创建一个遮蔽全局a的局部变量。 a关键字可以避免为分配创建局部变量。

您是否使用睡眠程序或cron,取决于您,但请注意以下事项:

  • 您的程序会在变量{{1}}中的请求之间保持状态。如果您使用cron并多次调用您的程序,则需要将此状态存储在其他位置。
  • 如果您的程序崩溃(例如返回无效数据并且json解码因异常而失败),cron将再次启动它,因此它最终会恢复。这可能是也可能不是。
  • 当通过cron运行时,你会以更多的计算为代价来降低系统的内存占用量(每五分钟初始化一次Python解释器)。