• Python多线程启动http.server


    OS: Windows 8.1 with update

    关键字:Python3.4, http.server, Thread

    例子代码如下:

    import os
    from threading import Thread
    import time
    import webbrowser
    
    port_number = "8000"
    
    def run_on(port):  
        os.system("python -m http.server " + port)
       
    if __name__ == "__main__":
        server = Thread(target=run_on, args=[port_number])
        #run_on(port_number) #Run in main thread
        #server.daemon = True # Do not make us wait for you to exit  
        server.start()
        time.sleep(2) #Wait to start the server first
    
    def test():
        url = "http://localhost:" + port_number
        webbrowser.open(url)
        print(url + " is opened in browser")
    
    test()

    代码解释:

    1. os.system("python -m http.server " + port),“python -m http.server 8000”是一个cmd,能够启动一个http server。

    2. server = Thread(target=run_on, args=[port_number]), 创建一个线程用来启动http server。如果启动在主线程里面启动http server,将会阻塞主线程,而不能执行下面的代码。

    3. server.start(), 启动线程。

    4. time.sleep(2),等待启动http server。

    5. webbrowser.open(url), 打开url。

    另外一个例子启动/停止服务器

    from threading import Thread
    import webbrowser, http.server, socketserver
    import time;
    
    port_number = 8000
    
    server = None
    def startServer(port):
        Handler = http.server.SimpleHTTPRequestHandler
        global server
        server = socketserver.TCPServer(("", port), Handler)
    
        print("Start server at port", port)
        server.serve_forever()
       
    def start(port):
        thread = Thread(target=startServer, args=[port])
        thread.start()
        
        startTime = int(time.time())
        while not server:
            if int(time.time()) > startTime + 60:
                print("Time out")
                break
        return server
    
    def stop():
        if server:
            server.shutdown()
            
    def openUrl():
        url = "http://localhost:" + str(port_number)
        webbrowser.open(url)
        print(url + " is opened in browser")
    
    if __name__ == "__main__":
        start(port_number)
        openUrl()

    参考:

    https://docs.python.org/3/library/http.server.html#http.server.HTTPServer

    https://docs.python.org/3/library/threading.html?highlight=thread#module-threading

  • 相关阅读:
    html5 自定义属性data-*
    企业微信接口授权
    js对象---字符串
    谈谈html5新增的元素及其他功能
    模拟缓存
    jdbc数据库连接
    面向对象的理解
    最简单的Spring+SpringMVC+Mybatis的整合
    EF报错 附加类型model失败
    c# Web服务远程“调用”调试
  • 原文地址:https://www.cnblogs.com/ldlchina/p/4405019.html
Copyright © 2020-2023  润新知