2016-12-02 64 views
1

我有这样的脚本:如何在服务器启动后继续使用python脚本?

import http.server 

class JotterServer(http.server.BaseHTTPRequestHandler): 
    def do_GET(self): 
     self.send_response(200) 

     self.send_header('Content-Type', 'text/plain') 
     self.end_headers() 

     message = "Howdy" 
     self.wfile.write(bytes(message, 'utf-8')) 
     return 

def start_server(): 
    print('Starting jotter server...') 

    server_address = ('127.0.0.1', 8000) 
    httpd = http.server.HTTPServer(server_address, JotterServer) 
    httpd.serve_forever() 

start_server() 

print("hi") 

最后一行不会被调用。如何在服务器启动后继续运行代码?

回答

2

以下程序将在新线程中启动服务器并继续执行主线程。主线程将打印嗨控制台。

import http.server 
import threading 

class JotterServer(http.server.BaseHTTPRequestHandler): 

    def do_GET(self): 
     self.send_response(200); 

     self.send_header('Content-Type', 'text/plain') 
     self.end_headers() 

     message = "Howdy" 
     self.wfile.write(bytes(message, 'utf-8')) 
     return 

def start_server(): 
    print('Starting jotter server...') 

    server_address = ('127.0.0.1', 8080) 
    httpd = http.server.HTTPServer(server_address, JotterServer); 
    thread = threading.Thread(target=httpd.serve_forever); 
    thread.start(); 

start_server() 

print("hi") 
0

你可以试试:

from threading import Thread 
... 
t=Thread(target=start_server) 
t.start() 

(而不是start_server()直接)

0

我想这是serve_forever

python docs

因为serve_forever(POLL_INTERVAL = 0.5) :处理请求,直到明确 s hutdown()请求。轮询每个poll_interval秒关闭。 忽略超时属性。如果您需要定期执行任务,请在另一个线程中执行 。

您应该尝试使用httpd.handle_request

相关问题