Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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

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_Sockets - Fatal编程技术网

没有无限循环的Python服务器套接字?

没有无限循环的Python服务器套接字?,python,multithreading,sockets,Python,Multithreading,Sockets,我想创建一个类,允许在同一端口上发送和接收消息,并在程序执行操作时从传入消息创建事件驱动的应用程序。我没有太多的插座经验,所以我不知道如何做到这一点。这里是我的SimpleSock类,到目前为止它只绑定套接字。我也在那里放了一个无限循环来监听连接,但是我知道这对我想要的东西不起作用,因为程序除了监听之外什么都做不了 import socket class SimpleSock: def __init__(self, ip=None, port=None): if ip

我想创建一个类,允许在同一端口上发送和接收消息,并在程序执行操作时从传入消息创建事件驱动的应用程序。我没有太多的插座经验,所以我不知道如何做到这一点。这里是我的SimpleSock类,到目前为止它只绑定套接字。我也在那里放了一个无限循环来监听连接,但是我知道这对我想要的东西不起作用,因为程序除了监听之外什么都做不了

import socket

class SimpleSock:

    def __init__(self, ip=None, port=None):
        if ip == None or port == None:
            print("SimpleSock cannot init without an ip and port")
        else:
            self.ip = ip
            self.port = port
            self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

            print("attempting connection to " + self.ip + " on port " + str(self.port))

            self.socket.bind((self.ip, self.port))
            self.socket.listen(5)

            print("connected")

            while True:
                (clientsocket, address) = self.socket.accept()
                #do something

如何编写一个没有无限循环的listen?我需要使用线程吗?

Python中的事件驱动网络应用程序可以使用Python Twisted或Tornado等框架构建。您可以在此处的另一个问题中看到比较:


一般的想法是,框架将允许您在发生事件(如数据等待套接字)时注册回调,框架通常是您的“主循环”(因此它通常接管主线程的控制)。大多数情况下,您不需要线程——只要您的所有事件源都可以使用select()或类似工具等待,所有内容都可以在单个线程中多路传输。

是的,如果您的程序需要做的不仅仅是监听套接字,或者想要同时处理大量客户端连接,那么线程将是一个好主意。您还可以使用进程(googlepython多处理)而不是线程。