python 套接字,同时处理多个连接的最佳方法是什么?

发布于 2024-09-29 23:44:18 字数 239 浏览 1 评论 0原文

在 python 中同时处理大量连接的最佳方法是什么?我想到的第一种方法是线程化,它可以工作,但每个线程需要 10MB RAM,这是相当昂贵的。

那么还有什么其他方法可以同时处理大量连接呢?

我在不使用线程的情况下看到的唯一问题是使用 socket.recv() 等待来自该协议客户端的数据,因此一个线程处理多个客户端将无法工作。

但这就是我问这个问题的原因,处理多个连接的最佳方法是什么?

谢谢你!

What's the best way to handle lots of connections at once in python? The first way I think of is threading, which works but at 10MB of RAM per thread that's rather expensive.

So what other ways are there to handle lots of connections at once ?

The only problem I see without using threads is that using the socket.recv() waits for data from that protocolar client so one thread handling several clients wouldn't work.

But that's why I'm asking this question, whats the best way to handle several connections?

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

很糊涂小朋友 2024-10-06 23:44:18

如果您确实有大量并发连接,那么线程的一个很好的替代方案是带有回调的异步/基于事件的方法。

Python 已经为此目的提供了一个非常成熟且强大的库/框架 - Twisted。还有一个使用标准库 asyncore 模块的更简单的解决方案。从它的文档:

该模块提供了基本的
写作的基础设施
异步套接字服务客户端
和服务器。

只有两种方法可以实现
单个处理器上的程序可以做“更多”
而不是一次只做一件事。”
多线程编程是
最简单和最流行的方法
它,但还有另一个非常
不同的技术,让您
拥有几乎所有的优点
多线程,实际上没有
使用多线程。真的是
仅当您的程序是实用的
很大程度上受 I/O 限制。如果你的程序是
处理器受限,然后抢占
预定线程大概是什么
你真的需要。网络服务器是
然而,很少受处理器限制。

一般来说,异步套接字服务器最近是一个非常热门的话题(node.js 的炒作就是见证),我相信你可以在网上找到很多有趣的材料。

A good alternative to threads, if you have a truly large amount of simultaneous connections, is an asychronous/events based approach with callbacks.

Python already has a very mature and powerful library/framework for this purpose - Twisted. There's also a simpler solution using the standard library asyncore module. From its docs:

This module provides the basic
infrastructure for writing
asynchronous socket service clients
and servers.

There are only two ways to have a
program on a single processor do “more
than one thing at a time.”
Multi-threaded programming is the
simplest and most popular way to do
it, but there is another very
different technique, that lets you
have nearly all the advantages of
multi-threading, without actually
using multiple threads. It’s really
only practical if your program is
largely I/O bound. If your program is
processor bound, then pre-emptive
scheduled threads are probably what
you really need. Network servers are
rarely processor bound, however.

Generally, asynchronous socket servers is a very hot topic lately (node.js hype as a witness), I'm sure you can find a lot of interesting material online.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文