Python函数被多次执行

时间:2019-06-14 02:47:51

标签: python mysql

我想从VPS中的Mysql数据库中的表中获取并打印所有记录,但是当我使用for循环打印所有检索到的记录时,我将它们打印了2-3次,而不仅仅是1次。

#!/usr/bin/env python

#Modules imported

# VPS
# Parameters to connecto to de DB in the VPS

def connDB():
    global conn
    global cur
    try:
        conn = MySQLdb.connect(DBhost, DBuser, DBpass, DBdb, charset='utf8', use_unicode=True)
        cur = conn.cursor()
        print("...DB VPS connect")
    except:
        print("...DB VPS ERROR")
        pass

def selectallDB(query):
        global conn
        global cur

        try:
                cur.execute(query)
                localrpis = cur.fetchall()
                conn.commit()
                print("... select All OK")
                print('Total Row(s):', cur.rowcount)
                for i in localrpis:
                        print(i)

        except:
                print("... select ERROR")
                connDBLocal()
                pass

def getallDB():

        c_select = """
        SELECT * FROM %s
        """%(trpistmsMCSIR)
        selectallDB(c_select)


def checktime(sec):
        # Function to trigger the read data funtion from "sec" to "sec"
        while True:
                res = round(time()%sec)
                if res==0.0:
                        getallDB()
                sleep(0.2)  # Changed to 0.5

connDB()

while True:
        checktime(10)

我假设for内部的try循环执行了2次(有时甚至3次),但我不明白为什么。

...DB connect
...DB VPS connect
... select All OK
('Total Row(s):', 2L)
('SELECT result OK')
... select All OK
('Total Row(s):', 2L)
('SELECT result OK')

作为一个变通方案,经过许多更改,我得到了“工作”,将sleep(0.2)更改为sleep(0.5),但是我不确定这是否可以解决问题,或者只是幻想循环正在按预期工作

1 个答案:

答案 0 :(得分:0)

从重复的for行可以看出,这不是... select All OK循环。问题是您的while循环,因为round(0.2)等于0.0。这就是为什么在制作0.5时将其固定。从理论上讲,如果数据库操作足够快,它也可以运行3次(分别在0.0、0.2和0.4秒)。

如果您想每10秒钟运行一次代码,那么在两次检查之间sleep0.5秒是一个不错的选择。