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

2024-09-26 22:51:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: inpyimport程序jsonurldataopen
1条回答
网友
1楼 · 发布于 2024-09-26 22:51:56

以您的方式访问变量a是没有问题的,因为您从未在refresh函数中为其赋值。访问它的方式与访问url变量或甚至访问json导入的方式相同。如果要赋值给a(而不是对其调用append这样的方法),那么您将创建一个隐藏全局a的局部变量。global关键字避免为赋值创建局部变量。在

使用睡眠程序还是cron程序取决于您,但请记住以下几点:

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

相关问题 更多 >

    热门问题