这个是装饰器类。
class PostCache:
def __init__(self, func):
self.func = func
self.redis = redis.StrictRedis()
def __call__(self, url_list):
url_not_cached = []
for url in url_list:
if self.redis.get(url):
self.redis.expire(url, 600)
else:
url_not_cached.append(url)
self.redis.set(url, '1')
self.redis.expire(url, 600)
return self.func(url_not_cached)
这个是要被装饰的方法。
@rediscache.PostCache
def __get_content_list(self, url_list):
content_list = []
for url in url_list:
content_list.append(self.get_content(url))
time.sleep(config_intervaltime())
return content_list
然后报错
File "crawler.py", line 28, in get_posts
post_content_list = self.__get_content_list(url_list)
TypeError: __call__() missing 1 required positional argument: 'url_list'
该如何解决呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.