我正在编写一个通过socket编程处理HTTP请求的脚本。我的Python脚本只读取每个HTTP响应,搜索几个关键字并增加计数器。你知道吗
只有在没有传入消息的情况下,启动脚本才会占用高达90-99%的CPU。我该怎么处理?你知道吗
HOST = ''
SOCKET_LIST = []
RECV_BUFFER = 40966
PORT=int(sys.argv[1])
serviceInitiatedEvent=0
deliveredEvent=0
EstablishedEvent=0
ConnectionClearedEvent=0
def chat_server():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(10)
SOCKET_LIST.append(server_socket)
print "Chat server started on port " + str(PORT)
try:
while 1:
ready_to_read,ready_to_write,in_error = select.select(SOCKET_LIST,[],[],0)
for sock in ready_to_read:
if sock == server_socket:
sockfd, addr = server_socket.accept()
SOCKET_LIST.append(sockfd)
else:
try:
data = sock.recv(RECV_BUFFER)
if data:
if re.search('serviceInitiatedEvent></SOAP-ENV',data):
global serviceInitiatedEvent
serviceInitiatedEvent+=1
if re.search('deliveredEvent></SOAP-ENV',data):
global deliveredEvent
deliveredEvent+=1
else:
if sock in SOCKET_LIST:
SOCKET_LIST.remove(sock)
except:
broadcast(server_socket, sock, "Client (%s, %s) is offline\n" % addr)
continue
except KeyboardInterrupt:
print "service Initiated Event:%s" % (serviceInitiatedEvent)
print "delivered Event: %s" % (deliveredEvent)
server_socket.close()
if __name__ == "__main__":
sys.exit(chat_server())
如果您有使用100%的
while 1
循环的代码,那可能就是罪魁祸首。它叫做busy waiting。你知道吗^{} 函数有
timeout
参数,指定它应该等待事件多长时间。在代码中,将其设置为0
,这样当套接字中没有可用数据时,控件会立即返回,从而导致繁忙的等待循环。你知道吗根据需要指定更大的超时时间,以便在无事可做时代码不会旋转:
相关问题 更多 >
编程相关推荐