Python-python消息队列服务如何退出

发布于 2016-12-23 06:03:29 字数 1337 浏览 1231 评论 2

当服务打开后 无法使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-10-14 05:17:06

问题描述的不是很清楚,是不是使用了多线程造成的,如果是多线程,这时候你的主线程似乎已经结束了,而子线程还在继续运行,不会响应你的ctrl+c的。多线程的时候子线程start之前调用:setDaemon(True),这样子线程就会和主线程一起结束了。

夜无邪 2017-02-11 08:46:02

如果要捕获signal,需要另外编写代码的

def shutdown(signum, frame):
import sys
sys.exit()

import signal
signal.signal(signal.SIGINT, shutdown)
signal.signal(signal.SIGTERM, shutdown)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文