繁体   English   中英

我的python脚本通过套接字编程处理HTTP请求时,CPU达到100%吗?

[英]CPU reaches 100 percent with starting of my python script which handles HTTP requests through socket programming?

我正在编写用于通过套接字编程处理HTTP请求的脚本。 我的Python脚本仅读取每个HTTP响应,搜索一些关键字并增加计数器。

没有传入消息时,仅启动脚本会使CPU占用高达90-99%的资源。 我该如何处理?

 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()) 

如果您的while 1循环代码使用了100%,那可能是罪魁祸首。 这叫做忙等待

select函数具有timeout参数,用于指定事件等待的时间。 在您的代码中,将其设置为0 ,以便套接字中没有可用数据时,控制立即返回,从而导致繁忙的等待循环。

根据您的需要指定更大的超时时间,以便在无事可做时代码不会旋转:

ready_to_read,ready_to_write,in_error = select.select(SOCKET_LIST,[],[], 1)
#                                                                       ^^^ here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM