Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run a python script like pm2 for nodejs

I've used pm2 for my Node.js script and I love it.
Now I have a python script which collect streaming data on EC2. Sometimes the script bombs out and I would like a process manager to restart itself like pm2.

Is there something the same as pm2 for python? I've been searching around and couldn't find anything.

Here's my error

  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: 

It's a simple data collecting script

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=['']) 

That I would like it to just restart itself in case something happens.

like image 327
toy Avatar asked Aug 20 '15 20:08

toy


People also ask

How do I run a Python script in PM2?

Running Your Python Script with PM2 After installation is done, you can start any python script through the PM2 by using $ pm2 start <script name> command.

Can Nodejs run Python script?

The python-shell module by extrabacon is a simple way to run Python scripts from Node. js with basic, but efficient inter-process communication and better error handling.

What is PM2 in node js?

PM2 is a Node. js process manager that comes with a built-in load balancer. It helps facilitate production deployments and enables you to keep running applications alive indefinitely (even when accidents occur).


2 Answers

PM2 is enough, it will run interpreter by suffix:

{   ".sh": "bash",   ".py": "python",   ".rb": "ruby",   ".coffee" : "coffee",   ".php": "php",   ".pl" : "perl",   ".js" : "node" } 
like image 30
Zoe Bi Avatar answered Sep 24 '22 22:09

Zoe Bi


You can actually run python scripts from within pm2:

pm2 start echo.py 

If the script ends in a .py suffix it will use a python interpreter by default. If your filename doesn't end in .py you can do:

pm2 start echo --interpreter=python 

I've found you have to be a little bit careful which python you are using, especially if you are using a virtualenv python with a different version to the 'default' python on your machine.

like image 156
Simon Smith Avatar answered Sep 25 '22 22:09

Simon Smith