From 65fb4680ff193fa686a8e57645b83de5766df4a3 Mon Sep 17 00:00:00 2001 From: Spider Date: Thu, 27 Jul 2017 16:59:20 +0800 Subject: [PATCH 1/5] =?UTF-8?q?'=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E8=81=8C=E8=B4=A3=E9=93=BEDEMO;=E5=8F=AF=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E6=B8=85=E6=B4=97=E5=BE=AE=E5=8D=9A=E6=97=B6=E9=97=B4?= =?UTF-8?q?'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README" | 1 + .../time_conversion.py" | 155 ++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 "\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/README" create mode 100644 "\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/time_conversion.py" diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/README" "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/README" new file mode 100644 index 0000000..6c8a2f9 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/README" @@ -0,0 +1 @@ +一个可以用于清洗微博的时间的职责链 \ No newline at end of file diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/time_conversion.py" "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/time_conversion.py" new file mode 100644 index 0000000..401dbd8 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/time_conversion.py" @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +# @Time : 2017/7/27 10:22 +# @Author : 哎哟卧槽 +# @Site : 用作时间格式转换;例如 :3小时之前 3天之前 +# @File : time_conversion.py +# @Software: PyCharm + +import re +from abc import ABCMeta, abstractmethod +from datetime import datetime, timedelta + + +def re_findall(pattern, string, flags=0): + """ + :param pattern: 正则表达式 + :param string: 需要匹配的字符串 + :param flags: + :return: 与结果相匹配的列表 + """ + string = re.findall(pattern, string, flags) + return string or '' + + +class Handler(metaclass=ABCMeta): + + name = '时间转换基类' + + def __init__(self,): + self.successor = None + + def setsuccessor(self, successor): + self.d = datetime.now() + self.successor = successor + + @abstractmethod + def handler(self, data): return + + +class MinutesBefore(Handler): + + name = '分钟之前' + + def handler(self, data): + value = re_findall(r'(\d+)分钟', data) + if value: + d1 = self.d + timedelta(minutes=-int(value)) + return d1.strftime('%Y-%m-%d %H:%M:%S') + else: + return self.successor.handler(data) + + +class HoursBefore(Handler): + + name = '小时之前' + + def handler(self, data): + value = re_findall(r'(\d+)小时', data) + if value: + d1 = self.d + timedelta(hours=-int(value)) + return d1.strftime('%Y-%m-%d %H:%M:%S') + else: + return self.successor.handler(data) + + +class MonthsBefore(Handler): + + name = '月份前' + + def handler(self, data): + value = re_findall(r'(\d{1,2}月\d{1,2}日\s+\d{2}:\d{2})', data) + if value: + d1 = datetime.strptime(' '.join(value), '%m月%d日 %H:%M') + return str(self.d.year) + '-' + d1.strftime('%m-%d %H:%M:%S') + else: + return self.successor.handler(data) + + +class YearsBefore(Handler): + + name = '年之前' + + def handler(self, data): + value = re_findall(r'(\d{4}-\d{1,2}-\d{1,2}\s+\d{2}:\d{2}:\d{2})', data) + if value: + return ''.join(value) + else: + return self.successor.handler(data) + + +class TodayBefore(Handler): + + name = '今天' + + def handler(self, data): + value = re_findall(r'今天(\d{2}:\d{2})', data) + if value: + d2 = self.d.strftime('%Y-%m-%d') + return d2 + ''.join(value) + else: + return self.successor.handler(data) + + +class Yesterday(Handler): + + name = '昨天' + + def handler(self, data): + value = re_findall(r'昨天\s(\d{2}:\d{2})', data) + if value: + d1 = datetime.now() + timedelta(days=-1) + return d1.strftime('%Y-%m-%d') + ' ' + ''.join(value) + ':00' + else: + return self.successor.handler(data) + + +class YesterdayBefore(Handler): + + name = '前天' + + def handler(self, data): + value = re_findall(r'前天\s(\d{2}:\d{2})', data) + if value: + d1 = datetime.now() + timedelta(days=-2) + return d1.strftime('%Y-%m-%d') + ' ' + ''.join(value) + ':00' + else: + return self.successor.handler(data) + + +class DefalutValue(Handler): + + name = '没有匹配到的默认' + + def handler(self, data): + return '{}:没有匹配到任何东西'.format(data) + + +def time_conversion(data): + p1 = TodayBefore() + p2 = YearsBefore() + p3 = MonthsBefore() + p4 = HoursBefore() + p5 = MinutesBefore() + p6 = Yesterday() + p7 = YesterdayBefore() + p1.setsuccessor(p2) + p2.setsuccessor(p3) + p3.setsuccessor(p4) + p4.setsuccessor(p5) + p5.setsuccessor(p6) + p6.setsuccessor(p7) + return p1.handler(data) + + +if __name__ == '__main__': + print(time_conversion('前天 15:05')) From 7b81d0c5cf6c1068801d451565808bda1f27be43 Mon Sep 17 00:00:00 2001 From: thsheep Date: Thu, 27 Jul 2017 17:08:15 +0800 Subject: [PATCH 2/5] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5841e1d..d26211e 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ Python学习笔记 + +添加了一个职责链DEMO可以用于清洗微博事件。 From 585f3a414b8a1fd8abf5e1a6310d751e625803a5 Mon Sep 17 00:00:00 2001 From: thsheep Date: Thu, 27 Jul 2017 17:08:28 +0800 Subject: [PATCH 3/5] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d26211e..b6978ef 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ Python学习笔记 -添加了一个职责链DEMO可以用于清洗微博事件。 +添加了一个职责链DEMO可以用于清洗微博时间。 From 00cb0c99df805aa6d424bb54c920b6b2de120b2c Mon Sep 17 00:00:00 2001 From: Spider Date: Fri, 28 Jul 2017 11:07:57 +0800 Subject: [PATCH 4/5] =?UTF-8?q?'=E6=94=B9=E4=BA=86=E6=94=B9=E6=B8=85?= =?UTF-8?q?=E6=B4=97demo'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README" | 0 .../timeconversion.py" | 190 ++++++++++++++++++ .../time_conversion.py" | 155 -------------- 3 files changed, 190 insertions(+), 155 deletions(-) rename "\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/README" => "\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/README" (100%) create mode 100644 "\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/timeconversion.py" delete mode 100644 "\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/time_conversion.py" diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/README" "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/README" similarity index 100% rename from "\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/README" rename to "\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/README" diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/timeconversion.py" "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/timeconversion.py" new file mode 100644 index 0000000..c1116e7 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/timeconversion.py" @@ -0,0 +1,190 @@ +# -*- coding: utf-8 -*- +# @Time : 2017/7/27 10:22 +# @Author : 哎哟卧槽 +# @Site : 用作时间格式转换;例如 :3小时之前 3天之前 +# @File : time_conversion.py +# @Software: PyCharm + +import re +from abc import ABCMeta, abstractmethod +from datetime import datetime, timedelta +import threading +Lock = threading.Lock() + + +def re_findall(pattern, string, flags=0): + """ + :param pattern: 正则表达式 + :param string: 需要匹配的字符串 + :param flags: + :return: 与结果相匹配的字符串 + """ + string = re.findall(pattern, string, flags) + return ''.join(string) or '' + + +class Handler(metaclass=ABCMeta): + '''时间转换基类''' + + def __init__(self,): + self.successor = None + + def set_successor(self, successor): + """设置继任者 + :param successor: 继任者 + :return: + """ + self.d = datetime.now() + self.successor = successor + + @abstractmethod + def handler(self, data): return + + +class MinutesBefore(Handler): + """分钟之前""" + _g_name = '_name_minutes_before' + + def handler(self, data): + value = re_findall(r'\s*(\d+)分钟\s*', data) + if value: + d1 = self.d + timedelta(minutes=-int(value)) + return d1.strftime('%Y-%m-%d %H:%M:%S') + return self.successor.handler(data) if self.successor else data + + +class HoursBefore(Handler): + """小时之前""" + _g_name = '_name_hours_before' + + def handler(self, data): + value = re_findall(r'\s*(\d+)小时\s*', data) + if value: + d1 = self.d + timedelta(hours=-int(value)) + return d1.strftime('%Y-%m-%d %H:%M:%S') + return self.successor.handler(data) if self.successor else data + + +class MonthsBefore(Handler): + """月份前""" + _g_name = '_name_months_before' + + def handler(self, data): + value = re_findall(r'\s*(\d{1,2}月\d{1,2}日\s+\d{2}:\d{2})\s*', data) + if value: + d1 = datetime.strptime(value, '%m月%d日 %H:%M') + return str(self.d.year) + '-' + d1.strftime('%m-%d %H:%M:%S') + return self.successor.handler(data) if self.successor else data + + +class YearsBefore(Handler): + """年之前""" + _g_name = '_name_years_before' + + def handler(self, data): + value = re_findall(r'\s*(\d{4}-\d{1,2}-\d{1,2}\s+\d{2}:\d{2}:\d{2})\s*', data) + if value: + return value + return self.successor.handler(data) if self.successor else data + + +class TodayBefore(Handler): + """今天""" + _g_name = '_name_todays_before' + + def handler(self, data): + value = re_findall(r'\s*今天\s*(\d{2}:\d{2})\s*', data) + if value: + d2 = self.d.strftime('%Y-%m-%d') + return d2 + value + return self.successor.handler(data) if self.successor else data + + +class Yesterday(Handler): + '''昨天''' + _g_name = '_name_yesterday' + + def handler(self, data): + value = re_findall(r'昨天\s*(\d{2}:\d{2})\s*', data) + if value: + d1 = datetime.now() + timedelta(days=-1) + return d1.strftime('%Y-%m-%d') + ' ' + value + ':00' + return self.successor.handler(data) if self.successor else data + + +class YesterdayBefore(Handler): + '''前天''' + _g_name = '_name_yesterday_before' + + def handler(self, data): + value = re_findall(r'前天\s*(\d{2}:\d{2})\s*', data) + if value: + d1 = datetime.now() + timedelta(days=-2) + return d1.strftime('%Y-%m-%d') + ' ' + value + ':00' + return self.successor.handler(data) if self.successor else data + + +class SeveralDays(Handler): + '''几天前''' + _g_name = '_name_several_days' + + def handler(self, data): + value = re_findall(r'\s*(\d+)\s*天前', data) + if value: + d1 = datetime.now() + timedelta(days=-int(value)) + return d1.strftime('%Y-%m-%d') + ' 00:00:00' + return self.successor.handler(data) if self.successor else data + + +class TimeConversion(object): + """单例模式 + 防止每次重复创建实例化、节约系统资源 + """ + # 定义静态变量实例 + __instance = None + + def __init__(self, *args, **kwargs): + # self.p1 = TodayBefore() + # p2 = YearsBefore() + # p3 = MonthsBefore() + # p4 = HoursBefore() + # p5 = MinutesBefore() + # p6 = Yesterday() + # p7 = YesterdayBefore() + # self.p1.set_successor(p2) + # p2.set_successor(p3) + # p3.set_successor(p4) + # p4.set_successor(p5) + # p5.set_successor(p6) + # p6.set_successor(p7) + # 将当前作用域中类名包含_g_name的类取出来添加进objects列表 + objects = [eval(key)() for key in globals() if hasattr(eval(key), '_g_name')] + # 拿到第一个清洗class + self.time_cleaner = objects[0] + tmp_cleaner = None + for obj in objects[1:]: + self.time_cleaner.set_successor(obj) if not tmp_cleaner else tmp_cleaner.set_successor(obj) + tmp_cleaner = obj + + def __new__(cls, *args, **kwargs): + """判断需要实例化对象是否存在 存在则直接返回 不存在则新建 + :param args: + :param kwargs: + :return: 清洗职责链的实例化对象 + """ + if not cls.__instance: + try: + Lock.acquire() + if not cls.__instance: + cls.__instance = super(TimeConversion, cls).__new__(cls, *args, **kwargs) + finally: + Lock.release() + return cls.__instance + + def handler(self, data): + return self.time_cleaner.handler(data) + + +if __name__ == '__main__': + sl = TimeConversion() + print(sl.handler('13分钟前')) \ No newline at end of file diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/time_conversion.py" "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/time_conversion.py" deleted file mode 100644 index 401dbd8..0000000 --- "a/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276demo/time_conversion.py" +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -# @Time : 2017/7/27 10:22 -# @Author : 哎哟卧槽 -# @Site : 用作时间格式转换;例如 :3小时之前 3天之前 -# @File : time_conversion.py -# @Software: PyCharm - -import re -from abc import ABCMeta, abstractmethod -from datetime import datetime, timedelta - - -def re_findall(pattern, string, flags=0): - """ - :param pattern: 正则表达式 - :param string: 需要匹配的字符串 - :param flags: - :return: 与结果相匹配的列表 - """ - string = re.findall(pattern, string, flags) - return string or '' - - -class Handler(metaclass=ABCMeta): - - name = '时间转换基类' - - def __init__(self,): - self.successor = None - - def setsuccessor(self, successor): - self.d = datetime.now() - self.successor = successor - - @abstractmethod - def handler(self, data): return - - -class MinutesBefore(Handler): - - name = '分钟之前' - - def handler(self, data): - value = re_findall(r'(\d+)分钟', data) - if value: - d1 = self.d + timedelta(minutes=-int(value)) - return d1.strftime('%Y-%m-%d %H:%M:%S') - else: - return self.successor.handler(data) - - -class HoursBefore(Handler): - - name = '小时之前' - - def handler(self, data): - value = re_findall(r'(\d+)小时', data) - if value: - d1 = self.d + timedelta(hours=-int(value)) - return d1.strftime('%Y-%m-%d %H:%M:%S') - else: - return self.successor.handler(data) - - -class MonthsBefore(Handler): - - name = '月份前' - - def handler(self, data): - value = re_findall(r'(\d{1,2}月\d{1,2}日\s+\d{2}:\d{2})', data) - if value: - d1 = datetime.strptime(' '.join(value), '%m月%d日 %H:%M') - return str(self.d.year) + '-' + d1.strftime('%m-%d %H:%M:%S') - else: - return self.successor.handler(data) - - -class YearsBefore(Handler): - - name = '年之前' - - def handler(self, data): - value = re_findall(r'(\d{4}-\d{1,2}-\d{1,2}\s+\d{2}:\d{2}:\d{2})', data) - if value: - return ''.join(value) - else: - return self.successor.handler(data) - - -class TodayBefore(Handler): - - name = '今天' - - def handler(self, data): - value = re_findall(r'今天(\d{2}:\d{2})', data) - if value: - d2 = self.d.strftime('%Y-%m-%d') - return d2 + ''.join(value) - else: - return self.successor.handler(data) - - -class Yesterday(Handler): - - name = '昨天' - - def handler(self, data): - value = re_findall(r'昨天\s(\d{2}:\d{2})', data) - if value: - d1 = datetime.now() + timedelta(days=-1) - return d1.strftime('%Y-%m-%d') + ' ' + ''.join(value) + ':00' - else: - return self.successor.handler(data) - - -class YesterdayBefore(Handler): - - name = '前天' - - def handler(self, data): - value = re_findall(r'前天\s(\d{2}:\d{2})', data) - if value: - d1 = datetime.now() + timedelta(days=-2) - return d1.strftime('%Y-%m-%d') + ' ' + ''.join(value) + ':00' - else: - return self.successor.handler(data) - - -class DefalutValue(Handler): - - name = '没有匹配到的默认' - - def handler(self, data): - return '{}:没有匹配到任何东西'.format(data) - - -def time_conversion(data): - p1 = TodayBefore() - p2 = YearsBefore() - p3 = MonthsBefore() - p4 = HoursBefore() - p5 = MinutesBefore() - p6 = Yesterday() - p7 = YesterdayBefore() - p1.setsuccessor(p2) - p2.setsuccessor(p3) - p3.setsuccessor(p4) - p4.setsuccessor(p5) - p5.setsuccessor(p6) - p6.setsuccessor(p7) - return p1.handler(data) - - -if __name__ == '__main__': - print(time_conversion('前天 15:05')) From 60b3cc6d407fc732416c1b888624cc5e967848ad Mon Sep 17 00:00:00 2001 From: Spider Date: Thu, 3 Aug 2017 10:41:05 +0800 Subject: [PATCH 5/5] =?UTF-8?q?'=E8=A3=85=E9=80=BC=E5=A4=B1=E8=B4=A5'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../hbaseconnection_test.py" | 73 +++++++++++++++++++ .../timeconversion.py" | 41 +++++------ 3 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 "\350\256\276\350\256\241\346\250\241\345\274\217/\345\215\225\344\276\213Demo/hbaseconnection_test.py" diff --git a/README.md b/README.md index b6978ef..944a865 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ Python学习笔记 -添加了一个职责链DEMO可以用于清洗微博时间。 +添加了一个职责链DEMO可以用于清洗微博时间(装逼失败)。 diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/\345\215\225\344\276\213Demo/hbaseconnection_test.py" "b/\350\256\276\350\256\241\346\250\241\345\274\217/\345\215\225\344\276\213Demo/hbaseconnection_test.py" new file mode 100644 index 0000000..1e34399 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/\345\215\225\344\276\213Demo/hbaseconnection_test.py" @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +# @Time : 2017/7/31 14:15 +# @Author : 哎哟卧槽 +# @Site : +# @File : hbaseconnection.py +# @Software: PyCharm +import sys +import happybase +from happybase import NoConnectionsAvailable +from datetime import datetime +from common.public import * +import threading +Lock = threading.Lock() + +sys.setrecursionlimit(1500) + + +class HappyBaseConnection(object): + + __instance = None + + # def __init__(self, host='localhost', port=9090, *args, **kwargs): + # self.HB = happybase.Connection(host=host, port=port) + # self.HB.open() + # print('打开连接', self.HB) + + def __new__(cls, host='localhost', port=9090, *args, **kwargs): + if not cls.__instance: + try: + Lock.acquire() + if not cls.__instance: + cls.__instance = super(HappyBaseConnection, cls).__new__(cls, *args, **kwargs) + hb = happybase.Connection(host=host, port=port) + hb.open() + setattr(cls.__instance, 'hb', hb) + print('我只会调用一次') + finally: + Lock.release() + return cls.__instance + + def puts(self, table_name, row_key, mutations, send): + table = self.hb.table(table_name) + try: + with table.batch(transaction=True) as b: + if send: + b.put(row_key, mutations) + b.send() + print('处理任务结束:', datetime.now()) + return True + else: + b.put(row_key, mutations) + except NoConnectionsAvailable as err: + print(err.args) + raise NoConnectionsAvailable + + def get_data(self, table_name, row_key, columns): + print('开始查询数据:', datetime.now()) + table = self.hb.table(table_name) + if not isinstance(columns, list): + raise ValueError ("{}参数必须是list".format(columns)) + columns = [conve_byte(i) for i in columns] + row = table.row(conve_byte(row_key), columns=columns) + return row + + +if __name__ == '__main__': + HB = HappyBaseConnection('10.10.1.246') + HB2 = HappyBaseConnection('10.10.1.246') + print(HB) + print(HB2) + print(HB.get_data('webpages', '00117ee05a64db33ed3ad5bde3c58bfc', ['spider:info'])) + # print(HB.get_data('webpages', '00117ee05a64db33ed3ad5bde3c58bfc')) + print('查询数据结束:', datetime.now()) \ No newline at end of file diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/timeconversion.py" "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/timeconversion.py" index c1116e7..a4ef206 100644 --- "a/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/timeconversion.py" +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/\350\201\214\350\264\243\351\223\276+\345\215\225\344\276\213\346\250\241\345\274\217demo/timeconversion.py" @@ -144,27 +144,7 @@ class TimeConversion(object): __instance = None def __init__(self, *args, **kwargs): - # self.p1 = TodayBefore() - # p2 = YearsBefore() - # p3 = MonthsBefore() - # p4 = HoursBefore() - # p5 = MinutesBefore() - # p6 = Yesterday() - # p7 = YesterdayBefore() - # self.p1.set_successor(p2) - # p2.set_successor(p3) - # p3.set_successor(p4) - # p4.set_successor(p5) - # p5.set_successor(p6) - # p6.set_successor(p7) - # 将当前作用域中类名包含_g_name的类取出来添加进objects列表 - objects = [eval(key)() for key in globals() if hasattr(eval(key), '_g_name')] - # 拿到第一个清洗class - self.time_cleaner = objects[0] - tmp_cleaner = None - for obj in objects[1:]: - self.time_cleaner.set_successor(obj) if not tmp_cleaner else tmp_cleaner.set_successor(obj) - tmp_cleaner = obj + pass def __new__(cls, *args, **kwargs): """判断需要实例化对象是否存在 存在则直接返回 不存在则新建 @@ -177,6 +157,14 @@ def __new__(cls, *args, **kwargs): Lock.acquire() if not cls.__instance: cls.__instance = super(TimeConversion, cls).__new__(cls, *args, **kwargs) + objects = [eval(key)() for key in globals() if hasattr(eval(key), '_g_name')] + # 拿到第一个清洗class + time_cleaner = objects[0] + tmp_cleaner = None + for obj in objects[1:]: + time_cleaner.set_successor(obj) if not tmp_cleaner else tmp_cleaner.set_successor(obj) + tmp_cleaner = obj + setattr(cls.__instance, 'time_cleaner', time_cleaner) finally: Lock.release() return cls.__instance @@ -185,6 +173,13 @@ def handler(self, data): return self.time_cleaner.handler(data) +def time_conversion_main(data): + TC = TimeConversion() + return TC.handler(data) + if __name__ == '__main__': - sl = TimeConversion() - print(sl.handler('13分钟前')) \ No newline at end of file + s1 = TimeConversion() + s2 = TimeConversion() + print(s1) + print(s2) + print(s1.handler('13分钟前')) \ No newline at end of file