web开发,服务器开发环境摁两次CTRL+C才能继续运行

python flask web开发
本地码代码,push到coding,阿里服务器pull下来,在服务器环境下运行python app.py
打开网页,经常卡主不动,在命令行摁两下CTRL+C,才能继续运行,后台显示如下,求大神指点迷津,拜谢

^C^C----------####背景------------------------------
Exception happened during processing of request from ('61.149.176.46', 34151)
Traceback (most recent call last):
  File "/usr/lib64/python2.7/SocketServer.py", line 295, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib64/python2.7/SocketServer.py", line 321, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib64/python2.7/SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib64/python2.7/SocketServer.py", line 651, in __init__
    self.finish()
  File "/usr/lib64/python2.7/SocketServer.py", line 705, in finish
    self.wfile.flush()
  File "/usr/lib64/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
KeyboardInterrupt
----------------------------------------
阅读 5.3k
1 个回答

1) Ctrl+C的作用只是给当前的进程发送一个信号量,在Linux下,这个默认的信号量是SIGINT.默认程序是不抓取的,并且收到这个信号就退出,除非你自己程序显示拦截,信号量你可以看下这里
https://www.baidu.com/s?ie=utf-8&f=8&rsv...

有关python拦截信号量随手写个小例子,见

# -*- coding: utf-8 -*-

import signal

print "signal value is ", signal.SIGINT


def handler(signum, frame):
    print 'Signal handler called with signal', signum

signal.signal(signal.SIGINT, handler)

while True:
    import time
    time.sleep(1)

2) 从你程序退出的堆栈来看,程序不是卡住,而是阻塞在self._sock.sendall,也就是阻塞在给对方的socket发数据的函数里,你检查下是否到你的'61.149.176.46', 34151存在很大的数据量的情况

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题