【发布时间】:2014-04-09 07:32:24
【问题描述】:
我正在使用 Python 来了解客户端-服务器和线程编程的基础知识。
这是我的 main.py 应用程序:
from threading import Thread
from Server import Server
class Worker(object):
def __init__(self, clients):
#constructor
self.clients = clients
def start(self):
while True:
print("it work as expected!")
conn, addr = self.clients.get()
print( conn.recv(1024) )
#create a instance of the server
server = Server()
#put on a new thread
def serverThreadCallback(server):
server.start()
def createWorkerCallback():
worker = Worker(server.getClients())
worker.start()
#put the server on a new thread
serverThread = Thread( target=serverThreadCallback, args=(server, ) )
serverThread.daemon = True
serverThread.start()
'''
workerThread = Thread(target=createWorkerCallback)
workerThread.daemon = True
workerThread.start()
'''
这是我的 server.py
import socket
import queue
class Server(object):
'''
classdocs
'''
def __init__(self):
'''
Constructor
'''
self.clients = queue.Queue()
def create(self):
print("Creating server...")
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR , 1)
self.socket = server
def listen(self):
print("Starting server...")
self.socket.bind( ("0.0.0.0", 9002) )
self.socket.listen(10)
print("Server started. Listening on localhost port 9002")
while(True):
#conn, addr = self.server.accept()
self.clients.put(self.socket.accept())
def start(self):
self.create()
self.listen()
def getClients(self):
return self.clients
当我尝试在该线程中启动服务器时,监听方法 不打电话。服务器的 create() 方法中出现了问题。
我做错了什么?
【问题讨论】:
-
def start(self):是线程特定的名称,不应替换它。 -
我已经用 def startServer(self): 替换了 def start(self): 并且仍然存在同样的问题。来自listen方法的代码没有被执行。
-
为
startServer中的每一行添加一个print(),看看为我们缩小范围有多大。
标签: python multithreading sockets