class Retry(object):
"""
Retries function with exponential delay if it's releasing exception.
"""
def __init__(self, tries, exceptions=None, delay=1, exponent=1.5):
self.tries = tries
if exceptions:
self.exceptions = tuple(exceptions)
else:
self.exceptions = (Exception,)
self.delay = delay
self.exponent = exponent
def __call__(self, f):
def fn(*args, **kwargs):
exception = None
for i in range(self.tries):
try:
return f(*args, **kwargs)
except self.exceptions as e:
delay = self.delay * self.exponent ** i
if i + 1 == self.tries:
raise exception
sleep(delay)
exception = e
raise exception
return fn
@Retry(3)
def f():
...
for i in range(len(lines)):
line = lines[i]
- это не по-пайтоновски.for line in lines:
# line уже определена
Как же сделать так, чтобы и при запуске и дальнейшей работе потребляемая память питонов была не большой?Не видя кода, трудно о чем-либо судить, но совет могу дать. При парсинге, когда вы извлекаете характеристики "единицы" данных (товар интернет-магазина или твит в твиттере), вместо того, чтобы затем предавать в другую функцию список, содержащий множество "единиц" данных, передавайте их по одной при помощи yield.
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
>>> for name, phone in table.items():
... print '{0:10} ==> {1:10d}'.format(name, phone)
...
Jack ==> 4098
Dcab ==> 7678
Sjoerd ==> 4127
from flask import Flask
import test # именно так
app = Flask(__name__)
@app.route('/')
def main_page():
# постоянно актуальная информация, даже если переменная изменится в другом месте
return test.text
if __name__ == '__main__':
app.run()
from bs4 import BeautifulSoup
html_doc = """
<div class="example">
<p>bla-bla-bla</p>
<div>something not important</div>
<strong>SomeText</strong>
<br>
Нужный текст
<span style="color:red">Тоже нужный текст</span>
Нужный текст
</div>
"""
soup = BeautifulSoup(html_doc)
tag = soup.find("div", class_="example")
tag.div.decompose() # убираем вложенный div
tag.p.decompose() # убираем текст в теге <p>
tag.br.decompose() # убираем перенос <br>
print(tag)