Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的python脚本不一直在侦听_Python_Multithreading_Multiprocessing - Fatal编程技术网

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

为什么我的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():

你好,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()

您的代码有几个问题

  • 线程没有运行。您需要修改:
    
    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编码约定中,大写词通常用于类名。函数名和变量名都使用它。最好保持代码的一致性

它到底在哪里结束?使用while循环:)这就是整个脚本,我不知道在哪里实现while循环我知道什么时候使用while循环我只是不知道在我的代码中把它放在哪里