我想像运行自动服务一样运行这个脚本,它将每分钟运行一次,每天使用Twisted (我首先尝试'DAEMON‘,但它似乎很难,而且我没有找到好的tutos来做它,我已经尝试了crontab,但那不是我想要的)。
有没有人用Twisted这样做过,因为我找不到适合我的脚本的教程(从一个db表中获取数据,并将它们放入同一db的另一个表中)?我必须将日志保存在一个文件中,但这不是最困难的部分。
from twisted.enterprise import adbapi
from twisted.internet import task
import logging
from datetime import datetime
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks
"""
Test DB : This File do database connection and basic operation.
"""
log = logging.getLogger("Test DB")
dbpool = adbapi.ConnectionPool("MySQLdb",db="xxxx",user="guza",passwd="vQsx7gbblal8aiICbTKP",host="192.168.15.01")
class MetersCount():
def getTime(self):
log.info("Get Current Time from System.")
time = str(datetime.now()).split('.')[0]
return time
def getTotalMeters(self):
log.info("Select operation in Database.")
getMetersQuery = """ SELECT count(met_id) as totalMeters FROM meters WHERE DATE(met_last_heard) = DATE(NOW()) """
return dbpool.runQuery(getMetersQuery).addCallback(self.getResult)
def getResult(self, result):
print ("Receive Result : ")
print (result)
# general purpose method to receive result from defer.
return result
def insertMetersCount(self, meters_count):
log.info("Insert operation in Database.")
insertMetersQuery = """ INSERT INTO meter_count (mec_datetime, mec_count) VALUES (NOW(), %s)"""
return dbpool.runQuery(insertMetersQuery, [meters_count])
def checkDB(self):
d = self.getTotalMeters()
d.addCallback(self.insertMetersCount)
return d
a= MetersCount()
a.checkDB()
reactor.run()
发布于 2019-05-08 20:39:32
如果你想每分钟运行一次函数,可以看看LoopingCall。它接受一个函数,并以一定的间隔运行它,除非被告知停止。
你可以像这样使用它(我还没有测试过):
from twisted.internet.task import LoopingCall
looper = LoopingCall(a.checkDB)
looper.start(60)
文档在链接中。
https://stackoverflow.com/questions/55972133
复制相似问题