刘伟 发表于 2018-8-14 11:36:01

python定时重跑获取数据

  做大数据的童鞋经常会写定时任务跑数据,由于任务之间的依赖(一般都是下游依赖上游的数据产出),所以经常会导致数据获取失败,因为很多人发现数据失败后
  都会去查看日志,然后手动去执行自己的任务。下面我实现了一个自动重复执行去数据库取数,如果失败后自动重新去获取,直到把数据获取到。
  建数据表:
1 CREATE TABLE `testtable` (2   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,3   `name` varchar(20) NOT NULL,4   PRIMARY KEY (`id`)5 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;  开始的时候数据表是空的,等到脚本重试第3秒的时候向数据库插入数据。以下是python代码的实现

1 #!/usr/bin/env python 2 #-*- coning:utf-8 -*- 34 import MySQLdb 5 from time import sleep 67 class GetData(object): 8   def __init__(self): 9         self.conn = ''10         self.host = '127.0.0.1'11         self.port = 330612         self.user = 'root'13         self.passwd = '123456'14         self.db = 'test'15         self.cnum = 5 #set retry number16 17   def init_connect(self):18         self.conn = MySQLdb.connect(host=self.host, user=self.user, passwd=self.passwd, db=self.db, port=self.port,19 charset='utf8')20 21   def get_data(self):22         self.init_connect()23         cur = self.conn.cursor()24         sql = "select * from testtable"25         cur.execute(sql)26         rs = cur.fetchall()27         cur.close()28         self.conn.close()29         return rs30 31   def run(self):32         count = 133         while (count <= self.cnum):34             rs = self.get_data()35             if len(rs) > 0:36               print len(rs)37               break38 39             print count40             sleep(10)41             count += 142 43 if __name__ == '__main__':44   gd = GetData()45   gd.run()

  自己可以手动执行,在代码执行到第3秒的时候,执行下面的sql
insert into testtable(`name`) values ('123'),('456'),('789'),('1111'),('3222'),('444');  下面是定时的任务的脚本
00 08 * * * cd /home/python/lsh_sync; python getdata.py >> getdata.log 2>&1  OVER!
页: [1]
查看完整版本: python定时重跑获取数据