我有一个名为 DecayingSet 的类,它是一个过期的双端队列
class DecayingSet:
def __init__(self, timeout): # timeout in seconds
from collections import deque
self.timeout = timeout
self.d = deque()
self.present = set()
def add(self, thing):
# Return True if `thing` not already in set,
# else return False.
result = thing not in self.present
if result:
self.present.add(thing)
self.d.append((time(), thing))
self.clean()
return result
def clean(self):
# forget stuff added >= `timeout` seconds ago
now = time()
d = self.d
while d and now - d[0][0] >= self.timeout:
_, thing = d.popleft()
self.present.remove(thing)
我正在尝试在连接到流式 API 的正在运行的脚本中使用它。流 api 正在返回我试图放在双端队列中的 url,以限制它们进入程序的下一步。
class CustomStreamListener(tweepy.StreamListener):
def on_status(self, status, include_entities=True):
longUrl = status.entities['urls'][0]['expanded_url']
limit = DecayingSet(86400)
l = limit.add(longUrl)
print l
if l == False:
pass
else:
r = requests.get("http://api.some.url/show?url=%s"% longUrl)
当我在解释器中使用这个类时,一切都很好。但是当脚本运行时,我重复发送相同的 url,l 每次返回 True 表示该 url 不在集合内,什么时候应该在。是什么赋予了?