pythonタイミング再走取得データ

2088 ワード

大きなデータを作る子供靴は、定時タスク走データを書くことが多い.タスク間の依存(一般的には下流依存上流のデータ産出)のため、データ取得に失敗することが多い.データが失敗したことに気づいた人が多いからだ.
ログを表示し、手動で自分のタスクを実行します.次に、失敗した場合、データが取得されるまで自動的に再取得する自動繰り返し実行デデータベース取得を実現しました.
データテーブルの作成:
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 -*- 3  4 import MySQLdb 5 from time import sleep 6  7 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!