Мне недавно сказали мои vps, поскольку мой скрипт python использовал слишком много процессора (очевидно, скрипт использовал весь ядро в течение нескольких часов).простой скрипт python с использованием слишком большого количества cpu
мой сценарий использует библиотеку twython, чтобы поток твитов
def on_success(self, data):
if 'text' in data:
self.counter += 1
self.tweetDatabase.save(Tweet(data))
#we only want to commit when we have a batch
if self.counter >= 1000:
print("{0}: commiting {1} tweets".format(datetime.now(), self.counter))
self.counter = 0
self.tweetDatabase.commit()
Tweet класс, это работа, чтобы выбросить мета-данные о твиттере мне не нужно:
class Tweet():
def __init__(self, json):
self.user = {"id" : json.get('user').get('id_str'), "name" : json.get('user').get('name')}
self.timeStamp = datetime.datetime.strptime(json.get('created_at'), '%a %b %d %H:%M:%S %z %Y')
self.coordinates = json.get('coordinates')
self.tweet = {
"id" : json.get('id_str'),
"text" : json.get('text').split('#')[0],
"entities" : json.get('entities'),
"place" : json.get('place')
}
self.favourite = json.get('favorite_count')
self.reTweet = json.get('retweet_count')
также имеет a __str__
, который вернет суперкомпактное строковое представление объекта
tweetDatabase.commit()
просто сохраняет твиты в файл, а t он tweetDatabase.Save()
просто сохраняет чириканье в список:
def save(self, tweet):
self.tweets.append(tweet.__str__())
def commit(self):
with open(self.path, mode='a', encoding='utf-8') as f:
f.write('\n'.join(self.tweets))
self.tweets = []
Что лучший способ держать на низком уровне центрального процессора? если я сплю, я потеряю твиты, так как это будет время, когда программа будет потрачена не на прослушивание twitters api. Несмотря на это, я пробовал спать в течение секунды после того, как программа записывает в файл, однако это ничего не делало, чтобы свести процессор. Для сохранения записи в файл каждые 1000 твитов чуть больше минуты.
большое спасибо
Вы должны просмотреть свой код и найти, где находятся горячие точки. Возможно, вам нужна СУБД здесь вместо файла открытого текста ... –
Возможно, вы захотите попробовать переключиться на PyPy, который предлагает быстрый JIT – nodakai