我的工作场所正在进行一个有趣的项目。摆在我们面前的任务是这样的:
显然,转到的地方是Twisted库/框架,这是一个非常好的网络工具。然而,进一步研究文档,我发现了一些我不确定的事情。
拥有Java背景,我会通过为每个服务生成一个单独的线程并从那里开始来解决任务(至少在开始时)。然而,在Python中,我不能为了任何合理的目的而这样做,因为Python有GIL。我不确定,Twisted如何处理这个问题。我希望,Twisted有大量(如果不是多数)代码用C编写,其中GIL不是问题,但我找不到文档解释到我满意。
所以最常见的问题是:鉴于Twisted使用Reactor作为其主要设计模式,它是否能够:
大文件的大小为几百MB或几GB。大小并不重要,它是客户端必须保持与重要服务器连接的时间。
编辑:我实际上倾向于采用python多处理方式,但不确定,这对Twisted等是否正确。
答案 0 :(得分:3)
是
Twisted使用通用反应堆模型。 I / O通过您选择的民意调查,选择,以确定数据是否可用。它仅处理可用内容,并将数据传递到应用程序的其他阶段。这就是非阻塞的方式。
我认为它不提供非阻塞磁盘I / O,但我不确定。这个功能并不是大多数人在说非阻塞时所需要的。
是。不,也许吧。那些客户在做什么?在浏览器发出100个请求时,每一个都会刷新一次吗?每个人都在进行星系碰撞的数值模拟吗?每个发送字符串“嗨!”到服务器,没有期待回应?
Twisted每秒可轻松处理1000多个请求。
不确定。例如,BitTorrent的原始版本是用Twisted编写的。