Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Asynchronous 扭曲/延迟如何工作_Asynchronous_Twisted - Fatal编程技术网

Asynchronous 扭曲/延迟如何工作

Asynchronous 扭曲/延迟如何工作,asynchronous,twisted,Asynchronous,Twisted,如何知道函数应该以异步方式执行 异步函数应该返回一个延迟的(即时的)带有call-/errbacks的函数,该函数将在收到“异步”数据时被调用。接收到的数据作为第一个参数传递给回调。到现在为止,一直都还不错。但根据该报告: “延迟不是非阻塞护身符:它们是异步函数用来将结果传递到回调的信号……”。 如果在返回延迟函数之前执行耗时的操作,函数将被阻塞!?异步执行是否绑定到套接字/io操作?有人能解释一下这是怎么回事吗 谢谢 [如果这是一个愚蠢的问题,很抱歉,但我尝试开始使用Twisted,我想了解引

如何知道函数应该以异步方式执行

异步函数应该返回一个延迟的(即时的)带有call-/errbacks的函数,该函数将在收到“异步”数据时被调用。接收到的数据作为第一个参数传递给回调。到现在为止,一直都还不错。但根据该报告:

“延迟不是非阻塞护身符:它们是异步函数用来将结果传递到回调的信号……”。

如果在返回延迟函数之前执行耗时的操作,函数将被阻塞!?异步执行是否绑定到套接字/io操作?有人能解释一下这是怎么回事吗

谢谢

[如果这是一个愚蠢的问题,很抱歉,但我尝试开始使用Twisted,我想了解引擎盖下发生了什么。在这里发布问题之前,我已经尝试理解文档。]

Twisted中的函数不是异步的,除非您使用
reactor.callInThread
在线程中执行它们。只有通过反应器的I/O操作是异步的。(您可以将对线程的调用视为I/O;当线程中运行的函数完成时,将返回一个
延迟的
。)

您需要区分两种不同类型的“耗时操作”。一个消耗CPU时间。在这种情况下,Twisted将不会使它与您并发;计算密集型操作将阻止其他代码运行。您可以将它放在一个线程中(假设它本身不使用扭曲的API),也可以使用
spawnProcess
将它移动到另一个进程


然而,一个耗时的网络请求/响应会表现为一个写入数据的调用(该调用会立即有效完成)以及在收到响应后的另一个回调。这不会阻止Twisted执行其他代码,因为它会返回到主循环。这是一个延迟的回调函数。

Krondo.com的回调函数是学习Twisted的最好方法。关于延迟类的问题的答案是通过优秀的工作代码示例给出的。初学者和高级主题解释得非常好,而且顺序合理。

感谢您的解释!第一段让我明白得多。我认为你是创造扭曲的人之一。。。所以谢谢你的支持和回答我的问题![我觉得有点被医生杀了-也许像你的回答这样简单的解释会让像我这样的人的生活更轻松。]我故意打破了这里的规则。我这么做是因为在使用Twisted五年后,我认为对新用户最好的办法就是让他们看一下教程。没有什么比这更有用了。在这里回答这个问题真是太好了。然而,新的扭曲用户在这里和互联网上其他地方面对的文档不足所产生的问题数量是如此巨大,因此我认为在这种情况下,最好指向一个可靠和全面的资源。我可能应该发表评论,而不是回答,但我不能,因为我没有代表。要我删除吗?谢谢,我认为在这里发布链接是有意义的,即使问题得到了回答。显然,最初抱怨我的答案不是答案的人删除了他的评论。奇怪的