我有一个python脚本,它不断地从Twitter获取数据并将消息写入文件。我的问题是每小时,我希望我的程序将当前时间写入文件。下面是我的脚本。目前,它进入时间戳功能,只需每10秒打印一次。
#! /usr/bin/env python
import tweetstream
import simplejson
import urllib
import time
import datetime
import sched
class twit:
def __init__(self,uname,pswd,filepath):
self.uname=uname
self.password=pswd
self.filepath=open(filepath,"wb")
def main(self):
i=0
s = sched.scheduler(time.time, time.sleep)
output=self.filepath
#Grab every tweet using Streaming API
with tweetstream.TweetStream(self.uname, self.password) as stream:
for tweet in stream:
if tweet.has_key("text"):
try:
#Write tweet to file and print it to STDOUT
message=tweet['text']+ "\n"
output.write(message)
print tweet['user']['screen_name'] + ": " + tweet['text'], "\n"
################################
#Timestamp code
#Timestamps should be placed once every hour
s.enter(10, 1, t.timestamp, (s,))
s.run()
except KeyError:
pass
def timestamp(self,sc):
now = datetime.datetime.now()
current_time= now.strftime("%Y-%m-%d %H:%M")
print current_time
self.filepath.write(current_time+"\n")
if __name__=='__main__':
t=twit("rohanbk","cookie","tweets.txt")
t.main()
我的脚本是否有这样做而没有经常用IF语句每隔一分钟检查一次时间,看看已经过了多长时间?我可以使用一个计划的任务,比如我上面的操作,稍微修改一下我当前的实现吗?
答案 0 :(得分:4)
你的代码
sc.enter(10, 1, t.timestamp, (sc,)
要求在10秒内再次安排。如果你想每小时安排一次,
sc.enter(3600, 1, t.timestamp, (sc,)
似乎更好,因为一小时是3600秒,而不是10!
此外,该行
s.enter(1, 1, t.timestamp, (s,))
每写一条推文后1秒获得时间戳 - 只需在循环外调度第一次调用时间戳,并将其周期从10秒更改为3600。