2016-12-02 104 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

相關問題