在后台运行Python HTTPServer并继续执行脚本

时间:2015-10-09 01:45:02

标签: python python-multithreading basehttpserver python-daemon

我试图弄清楚如何在运行"" .serve_forever()方法后在后台运行我重载的自定义BaseHTTPServer实例。

通常,当您运行该方法时,执行将挂起,直到您执行键盘中断,但我希望它在后台继续执行脚本时提供请求。请帮忙!

2 个答案:

答案 0 :(得分:7)

您可以在另一个线程中启动服务器:https://docs.python.org/2/library/thread.html

类似于:

data-bind="valueWithDate: billDate"

答案 1 :(得分:0)

我试图使用async做一些长期动画,并认为我必须重写服务器才能使用aiohttp(https://docs.aiohttp.org/en/v0.12.0/web.html),但是Olivers使用单独线程的技术为我省去了所有的痛苦。我的代码如下所示,其中MyHTTPServer只是我的HTTPServer自定义子集

import threading
import asyncio
from http.server import BaseHTTPRequestHandler, HTTPServer
import socketserver
import io
import threading

async def tick_async(server):        
    while True:
        server.animate_something()
        await asyncio.sleep(1.0)

def start_server():
    httpd.serve_forever()
    
try:
    print('Server listening on port 8082...')

    httpd = MyHTTPServer(('', 8082), MyHttpHandler)
    asyncio.ensure_future(tick_async(httpd))
    loop = asyncio.get_event_loop()
    t = threading.Thread(target=start_server)
    t.start()
    loop.run_forever()