首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Twisted像服务一样运行python脚本

使用Twisted像服务一样运行python脚本
EN

Stack Overflow用户
提问于 2019-05-03 22:43:23
回答 1查看 156关注 0票数 0

我想像运行自动服务一样运行这个脚本,它将每分钟运行一次,每天使用Twisted (我首先尝试'DAEMON‘,但它似乎很难,而且我没有找到好的tutos来做它,我已经尝试了crontab,但那不是我想要的)。

有没有人用Twisted这样做过,因为我找不到适合我的脚本的教程(从一个db表中获取数据,并将它们放入同一db的另一个表中)?我必须将日志保存在一个文件中,但这不是最困难的部分。

代码语言:javascript
运行
复制
    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()
EN

回答 1

Stack Overflow用户

发布于 2019-05-08 20:39:32

如果你想每分钟运行一次函数,可以看看LoopingCall。它接受一个函数,并以一定的间隔运行它,除非被告知停止。

你可以像这样使用它(我还没有测试过):

代码语言:javascript
运行
复制
from twisted.internet.task import LoopingCall
looper = LoopingCall(a.checkDB)
looper.start(60)

文档在链接中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55972133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档