为什么我的python脚本不一直在听呢

2024-07-01 07:21:43 发布

您现在位置:Python中文网/ 问答频道 /正文

你好stackoverflow用户,所以我有一个问题,我试图编码一个web服务器,但脚本结束之前,我甚至可以测试它是否工作。所以我的问题是,如何才能使脚本永远运行?你知道吗

#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()

Tags: import脚本targetsignalportmsgsocketconn
1条回答
网友
1楼 · 发布于 2024-07-01 07:21:43

你的代码有几个问题。你知道吗

  • 线程无法运行。您需要修改: ConnProcessA.start() ConnProcessA.join()
  • ConnectionProcessorA不包含在粘贴的代码中。所以我得把这两行注释掉: t = threading.Thread(target=ConnectionProcessorA) t.start()
  • 名字阴影。请参阅这些行: socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ConnProcessA = threading.Thread(target=ConnProcessA) MasterProcessA = multiprocessing.Process(target=MasterProcessA)
  • 使用现有模块/函数名命名实例。名字阴影是非常危险的。只要尝试执行三行中的任意一行两次,就会看到错误。你知道吗
  • 另一方面,如果足够简单的话,可以重用一个变量来保存不同的内容。例如,以下两行距离足够近,以避免混淆: DataRecived = Conn.recv(1024) #receive data from client DataRecived = bytes.decode(DataRecived) #decode it to string
  • 似乎套接字服务器要连续侦听同一个端口,那么您可能需要添加s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)。正如在the doc最下面所说的。你知道吗
  • 另一个不太严重的问题是,在Python编码约定中,CapWords通常用于类名ref。函数名和变量名都使用它。最好保持代码一致。你知道吗

相关问题 更多 >

    热门问题