Python-python消息队列服务如何退出
当服务打开后 无法使用ctrl+c 或者发送结束的single结束 每次都要kill进程号才可以 不知道有没有更好的办法?
#encoding=utf-8
import threading
import random
import time
from Queue import Queue
class Host(threading.Thread):
def __init__(self, threadname, queue):
threading.Thread.__init__(self, name = threadname)
self.sharedata = queue
def run(self):
while True:
for i in range(20):
print self.getName(),'adding',i,'to queue'
self.sharedata.put(i)
time.sleep(random.randrange(10)/10.0)
time.sleep(8)
class Client(threading.Thread):
def __init__(self, threadname, queue):
threading.Thread.__init__(self, name = threadname)
self.sharedata = queue
def run(self):
while True:
print self.getName(),'got a value:',self.sharedata.get()
time.sleep(random.randrange(10)/10.0)
# Main thread
def main():
queue = Queue()
host = Host('Host', queue)
client = Client('Client', queue)
print 'Starting threads ...'
host.start()
client.start()
host.join()
client.join()
if __name__ == '__main__':
main()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题描述的不是很清楚,是不是使用了多线程造成的,如果是多线程,这时候你的主线程似乎已经结束了,而子线程还在继续运行,不会响应你的ctrl+c的。多线程的时候子线程start之前调用:setDaemon(True),这样子线程就会和主线程一起结束了。
如果要捕获signal,需要另外编写代码的
def shutdown(signum, frame):
import sys
sys.exit()
import signal
signal.signal(signal.SIGINT, shutdown)
signal.signal(signal.SIGTERM, shutdown)