为什么我的python脚本不一直在侦听
你好,stackoverflow用户,所以我有一个问题,我试图编码一个web服务器,但脚本在我可以测试它是否工作之前就结束了。所以我的问题是,我怎样才能让脚本永远运行下去为什么我的python脚本不一直在侦听,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,你好,stackoverflow用户,所以我有一个问题,我试图编码一个web服务器,但脚本在我可以测试它是否工作之前就结束了。所以我的问题是,我怎样才能让脚本永远运行下去 #import threading #import socket #import signal # Signal support (server shutdown on signal receive) import multiprocessing #import queue def MasterProcessA():
#import threading
#import socket
#import signal # Signal support (server shutdown on signal receive)
import multiprocessing
#import queue
def MasterProcessA():
import socket
import multiprocessing
import threading
HOST = '97.107.139.231' # Symbolic name, meaning all available interfaces
PORT = 8080 # Arbitrary non-privileged port
#print(PORT)
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#print 'Socket created'
#Bind socket to local host and port
#try:
socket.bind((HOST, PORT))
#except socket.error as msg:
##print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
#print 'Socket bind complete'
#Start listening on socket
socket.listen(100)
print "starting server"
def ConnProcessA():
print "thread step one"
Conn, Address = socket.accept()
t = threading.Thread(target=ConnectionProcessorA)
print "thread step two"
#t.daemon = True
t.start()
#print("A Got connection from:", Address)
DataRecived = Conn.recv(1024) #receive data from client
DataRecived = bytes.decode(DataRecived) #decode it to string
print DataRecived
Conn.send("HELLO World")
Conn.clouse()
ConnProcessA = threading.Thread(target=ConnProcessA)
#t.daemon = True
ConnProcessA.start()
MasterProcessA = multiprocessing.Process(target=MasterProcessA)
MasterProcessA.start()
您的代码有几个问题
- 线程没有运行。您需要修改:
ConnProcessA.start() ConnProcessA.join()
不包括在您粘贴的代码中。因此,我必须注释掉这两行:ConnectionProcessorA
t=线程。线程(目标=连接进程A) t、 开始()
- 名字阴影。请参阅这些行:
socket=socket.socket(socket.AF\u INET,socket.SOCK\u流) ConnProcessA=threading.Thread(目标=ConnProcessA) MasterProcessA=multiprocessing.Process(目标=MasterProcessA)
- 您使用现有模块/函数名命名实例。姓名阴影是非常危险的。只要尝试执行三行中的任意一行两次,就会看到错误
- 另一方面,如果足够简单,可以重用一个变量来保存不同的内容。例如,以下两行距离足够近,以避免混淆:
DataRecived=Conn.recv(1024)#从客户端接收数据 DataRecived=字节。解码(DataRecived)#将其解码为字符串
- 您的套接字服务器似乎要连续侦听同一端口,那么您可能需要添加
。正如在最底层所说的那样s.setsockopt(socket.SOL\u socket,socket.SO\u REUSEADDR,1)
- 另一个不太严重的问题是,在Python编码约定中,大写词通常用于类名。函数名和变量名都使用它。最好保持代码的一致性