Python守护进程(多线程开发)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

本段代码主要作用是httpsqs队列的消费端守护进程,从httpsqs中取出数据,放入mongodb

#!/usr/bin/pythonimportsys,time,json,loggingimportQueue, threading, datetimefromlib.base.daemonimportDaemonfromlib.queue.httpsqs.HttpsqsClientimportHttpsqsClientfromlib.db.DbMongodbimportDbMongodb

logging.basicConfig(level=logging.DEBUG,

format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',

datefmt='%a, %d %b %Y %H:%M:%S',

filename='myapp.log',

filemode='w')

queue=Queue.Queue()

httpsqs= HttpsqsClient('192.168.0.218','1218','httpsqs.com')

db= DbMongodb('192.168.0.119','testdb')classThreadGetHttpSqs(threading.Thread):def__init__(self):

threading.Thread.__init__(self)

self.httpsqs=httpsqs

self.queue=queuedefrun(self):whileTrue:

data= self.httpsqs.get('logtest')ifdataisnotNone:

self.queue.put(data)

logging.info('get:id %s , tablename %s'%(self.getName(),data))else:

time.sleep(3)classThreadInsertDB(threading.Thread):def__init__(self):

threading.Thread.__init__(self)

self.queue=queue

self.db=dbdefrun(self):whileTrue:

chunk=self.queue.get()

s=json.loads(chunk)

tablename= s['table']

data= s['data']

self.db.save(tablename,data)

logging.info('insert:id %s , tablename %s'%(self.getName(),tablename))

self.queue.task_done()classMyDaemon(Daemon):def_run(self):whileTrue:foriinrange(2):

t=ThreadGetHttpSqs()#t.setDaemon(True)t.start()foriinrange(2):

b=ThreadInsertDB()#t.setDaemon(True)b.start()

#线程已经为永真循环,进程不能再循环

time.wait()if__name__=="__main__":

daemon= MyDaemon('/tmp/daemon-example.pid')iflen(sys.argv) == 2:if'start'== sys.argv[1]:

daemon.start()elif'stop'== sys.argv[1]:

daemon.stop()elif'restart'== sys.argv[1]:

daemon.restart()else:PRint"Unknown command"sys.exit(2)

sys.exit(0)else:print"usage: %s start|stop|restart"%sys.argv[0]

sys.exit(2)

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航