코드에 두 개의 global WebServer
줄이 필요하지 않습니다. global
키워드는 전역 변수에 쓰기 액세스 권한을 부여하는 데 사용되며 WebServer
이라는 전역 변수가 없습니다.
create_web_server
메서드를 호출하는 것을 포함하여 코드에 여러 가지 문제가 있으므로 코드를 실행해야하는 메서드이므로 오류가 발생해도 코드는 여전히 오류가 발생하지만 오류를 해결하려면 코드가 다음과 같이 표시되어야합니다. WebServer
개체에
내 게시물의 하단에 코드의 실제 프로토 타입 예제를 포함 시켰습니다.
import SimpleHTTPServer
import SocketServer
import os
from threading import Thread
import threading
class WebServer(Thread):
def __init__(self, stream_path):
"""
Class to create a Web server and add given folder to the web server which is passed as an argument.
In this case it creates the web server to the incoming streams pushed by VLC to temp folder
"""
Thread.__init__(self)
self.stream_path = stream_path
def run(self):
"""
This method is built in Thread object method invoked by start()
and the code which is under run() will be executed.
"""
os.chdir(self.stream_path)
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
print "function thread", threading.currentThread()
httpd.serve_forever()
print "test1"
def create_web_server(self,stream_path):
"""
This method is to create the web server to a given path
"""
obj1 = WebServer(self,stream_path)
obj1.start()
print "server created"
def stop_web_server(self):
cmd='tskill python /A'
os.system(cmd)
if __name__ == '__main__':
create_web_server("","C:\\\\QED")
여기에 같은 일 (기본 SimpleHTTPRequestHandler
있는 디렉토리를 제공)를해야 코드의 단순화 된 버전입니다. C -이 Ctrl 키으로 중단 할 수 있도록
그것은 daemon
모드에서 스레드를 실행합니다. 그들은 원래 코드에서 목적을 달성하지 못했고 여러분의 WebServer
클래스가 어떻게 생겼는지에 대한 기본적인 프레임 워크를 보여주기 때문에 몇 가지 메소드를 제거했습니다.
import threading
import os
import time
import SimpleHTTPServer
import SocketServer
class WebServer(threading.Thread):
# Let's specify additional constructor arguments for host/port
# so you don't have to hardcode those values.
# We can specify default values for them as well.
def __init__(self, stream_path, host='localhost', port=8000):
super(WebServer, self).__init__()
self.stream_path = stream_path
self.host = host
self.port = port
# This is the method that will be called when you call
# .start() on a WebServer object.
def run(self):
os.chdir(self.stream_path)
handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer((self.host, self.port), handler)
httpd.serve_forever()
if __name__ == '__main__':
# Create a WebServer thread object, set it to daemonize
# and start it
ws = WebServer(r'C:\QED')
ws.daemon = True
ws.start()
# Since the main thread doesn't do anything after daemonizing
# the WebServer, it would exit immediately.
# This forever loop just ensures that the main thread runs
while True: time.sleep(1)
그리고 한 단계 더 걸릴 수, 당신은 Thread
서브 클래스를 만들 필요가 없습니다. Java에 익숙한 개발자라면 Thread
의 하위 클래스 화 또는 Runnable
의 구현이 표준 방식 인 개발자에게 '자연 스럽다'고 느끼기 때문에 허용됩니다. 그래서`글로벌 WebServer` 당신에게 오류를주고,
import threading
import os
import time
import SimpleHTTPServer
import SocketServer
def run_http_server(serve_dir, host='localhost', port=8000):
os.chdir(serve_dir)
handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer((host, port), handler)
httpd.serve_forever()
if __name__ == '__main__':
thread = threading.Thread(target=run_http_server, args=(r'C:\QED',))
thread.daemon = True
thread.start()
while True: time.sleep(1)
당신이 WebServer''에 값을 할당하지 :
당신은 뭔가를 할 수 있습니다. 그냥 선을 제거하고 잘 작동합니다! –