Как запустить скрипт python, такой как pm2 для nodejs
я использовал pm2
для моего узла.сценарий js, и мне это нравится.
Теперь у меня есть скрипт python, который собирает потоковые данные на EC2. Иногда сценарий бомбит, и я хотел бы, чтобы менеджер процессов перезапустил себя, как pm2.
есть ли что-то такое же, как pm2 для python? Я все обыскал и ничего не нашел.
вот моя ошибка
File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 430, in filter
self._start(async)
File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 346, in _start
self._run()
File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 286, in _run
raise exception
AttributeError: 'NoneType' object has no attribute 'strip'
/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:90:
Это простой скрипт сбора данных
class StdOutListener(StreamListener):
def on_data(self, data):
mydata = json.loads(data)
db.raw_tweets.insert_one(mydata)
return True
def on_error(self, status):
mydata = json.loads(status)
db.error_tweets.insert_one(mydata)
if __name__ == '__main__':
#This handles Twitter authetification and the connection to Twitter Streaming API
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
#This line filter Twitter Streams to capture data by the keywords: 'python', 'javascript', 'ruby'
stream.filter(follow=[''])
что я хотел бы его просто перезапустить себя в случае чего.
4 ответов
UPD: см. ответы ниже для лучших решений.
--
для этого есть несколько решений. Во-первых, вы можете использоватьhttp://supervisord.org/ что достойная всеобщая система управления процессом, которая включает много особенности из коробки, как автозапуск, счетчик рестарта, регистрировать, гибкая конфигурация и больше.
помимо этого, вы можете просто обернуть свою логику реализации в функцию, запустить ее в try except
блок, поймать все исключения и когда исключение cought, запустите функцию снова вместо выхода из скрипта. В вашем случае такая функция может включать создание прослушивателя, аутентификацию и часть потока.
вы действительно можете запускать скрипты python из pm2:
pm2 start echo.py
Если скрипт заканчивается на a .суффикс py по умолчанию будет использовать интерпретатор python. Если ваше имя файла не заканчивается .py вы можете сделать:
pm2 start echo --interpreter=python
я обнаружил, что вы должны быть немного осторожны, какой python вы используете, особенно если вы используете virtualenv python с другой версией python по умолчанию на вашем компьютере.
PM2 достаточно, он будет запускать интерпретатор суффиксом:
{
".sh": "bash",
".py": "python",
".rb": "ruby",
".coffee" : "coffee",
".php": "php",
".pl" : "perl",
".js" : "node"
}
в моем случае я использую scrapyd в своем проекте. Исходная команда:
scrapyd --pidfile /var/log/scrapyd/twistd.pid -l /var/log/scrapyd/logs/scrapyd.log
и версия pm2:
pm2 start scrapyd --interpreter python --watch --name=scrapyd -- --pidfile "/var/log/scrapyd/twistd.pid" -l "/var/log/scrapyd/logs/scrapyd.log"
надеюсь, что этот пример может помочь