我的程序中有两个整数;我们称它们为“ a
”和“ b
”。我想将它们加在一起并得到另一个整数。这些是常规的 Pythonint
对象。我在想; 我如何将它们与 Twisted 一起添加?performAsynchronousAddition
某处有什么特殊功能吗?我需要一个Deferred
吗?反应堆呢?反应堆是否参与?
3 回答
好的,要清楚。
Twisted 对cpu 绑定任务没有做任何事情 ,这是有充分理由的。没有办法通过重新排序子任务来使计算绑定的工作更快;你唯一能做的就是增加更多的计算资源;甚至这在 python 中也行不通,因为它的实现很微妙。
Twisted 提供了特殊的语义和事件循环处理,以防程序“卡住”等待外部的东西,如果它的控制;通常是在另一台机器上运行并通过网络连接与您的扭曲进程通信的进程。因为无论如何你都会等待,twisted 为你提供了一种同时完成更多事情的机制。也就是说,twisted 为I/O Bound 任务提供并发
tl; dr:twisted 用于网络代码。其他一切都只是普通的python。
这个怎么样:
c = a + b
这应该可以,并且不需要异步完成(它非常快)。
好问题,Twisted(或 Python)应该有办法至少产生几个核心的“a + b”(在我的 8 核 i7 上)。
不幸的是,Python GIL 阻止了这种情况的发生,这意味着您将不得不等待,不仅是 CPU 绑定的任务,还有一个核心在做这项工作,而其他七个核心什么也不做。
注意:也许更好的例子是“a() + b()”,甚至是“fact(sqrt(a()**b())”等,但重要的事实是,上述操作将锁定一个核心并且GIL 几乎可以阻止 Python 在该操作期间执行任何其他操作,这可能需要几个毫秒...