如何使用Twisted将两个整数相加?

48 投票
3 回答
5936 浏览
提问于 2025-04-17 01:32

我在程序里有两个整数,咱们叫它们“a”和“b”。我想把它们加在一起,得到一个新的整数。这些都是普通的 Python int 对象。我在想,怎么用 Twisted 来把它们加起来呢?有没有什么特别的 performAsynchronousAddition 函数?我需要用到 Deferred 吗?那反应器(reactor)又是干嘛的?反应器会参与其中吗?

3 个回答

-9

这是个好问题,Twisted(或者说Python)应该有办法让“a + b”这种操作在多个核心上同时进行(比如我这台8核的i7处理器)。

可惜的是,Python的全局解释器锁(GIL)让这种情况无法实现。这意味着你不仅要等着CPU处理任务,还得等一个核心在忙活,而其他七个核心却闲着没事做。

注意:也许更好的例子是“a() + b()”,或者“fact(sqrt(a()**b())”之类的,但重要的是,上面的操作会锁住一个核心,而GIL基本上会阻止Python在这个操作进行期间做其他事情,这可能会持续几毫秒……

9

这样做怎么样:

c = a + b

这样应该没问题,而且不需要异步处理(速度挺快的)。

43

好的,先说清楚。

Twisted 对于 CPU 密集型任务 没有任何处理,这是有原因的。因为对于计算密集型的工作,重新安排子任务并不能让它们运行得更快;你唯一能做的就是增加更多的计算资源,但即使这样在 Python 中也不一定有效,因为 Python 的实现有一些微妙的地方。

Twisted 提供了一种特殊的语义和事件循环处理,以防程序在等待一些超出其控制的事情时变得“卡住”。通常情况下,这种情况是因为有一个在另一台机器上运行的进程,通过网络连接与您的 Twisted 进程进行通信。因为你本来就会在“等待”,所以 Twisted 给你一个机制,让你在此期间可以做更多的事情。也就是说,Twisted 为 I/O 密集型任务 提供了并发处理。

简单来说:Twisted 是用来处理网络代码的。其他的事情就只是普通的 Python 了。

撰写回答