coroutine相关内容

如果不再使用Python生成器但尚未达到StopIteration,是否会对其进行垃圾回收?

当不再使用生成器时,应该对其进行垃圾收集,对吗?我尝试了以下代码,但不确定是哪一部分错了。 import weakref import gc def倒数(n): 而n: 收益n n- = 1 cd =倒数(10) cdw =弱引用.ref(cd)() 打印cd.next() gc.collect() 打印cd.next() gc.collect() prin ..
发布时间:2020-10-10 01:09:03 Python

如何在CPython中实现生成器和协程?

我已经读到在CPython中,解释器堆栈(为此目的而调用的Python函数列表)与C堆栈(在解释器自己的代码中调用的C函数列表)混合在一起。如果是这样,那么如何实现生成器和协程?他们如何记住执行状态? CPython是否将每个生成器/协程的堆栈复制到OS堆栈或从OS堆栈复制?还是CPython只是将生成器的最顶层堆栈框架保留在堆上,因为生成器只能从该最顶层的框架中屈服? 解决方案 yiel ..
发布时间:2020-10-10 01:09:01 Python

协程vs延续vs生成器

协程和延续与生成器有什么区别? 解决方案 我将从生成器开始,看到因为它们是最简单的情况。如@zvolkov所述,它们是可以重复调用而无需返回的函数/对象,但是在调用时将返回(屈服)一个值,然后中止执行。再次调用它们时,它们将从上次暂停执行的位置开始执行,然后再次执行操作。 生成器本质上是简化(不对称)的协程。协程和生成器之间的区别在于,协程在最初被调用后就可以接受参数,而生成器则不能 ..
发布时间:2020-10-10 01:07:47 其他开发

将带有回调的函数转换为Python生成器?

Scipy最小化函数(仅用作示例),可以选择在每个步骤中添加一个回调函数。所以我可以做类似的事情, def my_callback(x): print x scipy.optimize .fmin(func,x0,callback = my_callback) 是否可以使用回调函数创建fmin的生成器版本,以便我可以做, for my_fmin(func,x ..
发布时间:2020-10-10 01:07:45 Python

什么是协程?

什么是协程?它们与并发有何关系? 解决方案 协程与并发在很大程度上是正交的。协程是一种通用的控制结构,流控制在两个不同的例程之间协同传递而不返回。 Python中的“ yield”语句就是一个很好的例子。它创建一个协程。遇到“ yield”时,将保存该函数的当前状态,并将控制权返回给调用函数。然后,调用函数可以将执行转移回给yield函数,并且其状态将恢复到遇到“ yield”的位置 ..
发布时间:2020-10-07 20:26:19 其他开发

C ++ 20中的协程是什么?

? 与“ Parallelism2”或/和“ Concurrency2”有什么不同(请看下图)? 下图来自ISOCPP。 https://isocpp.org/files/img/wg21-timeline-2017-03.png 解决方案 在抽象层次上,协程将 SIMD(单指令多数据)具有多个“执行线程”,但只有一个执行状态(仅适用于多个数据)。可以说并行算法有点 ..
发布时间:2020-09-28 02:50:28 C/C++开发

C ++ 1z协程具有语言功能吗?

为什么协程(作为最新的C ++ 1z草案)将被实现为核心语言功能(特别的关键字和所有功能)而不是库扩展? 他们已经有一些实现(Boost.Coroutine等),其中一些实现可以独立于平台,与我阅读的内容无关。委员会为什么决定将其烘焙为核心语言本身? 我不是说他们不应该这样做,而是Bjarne Stroustrup自己在一些谈话中提到(不要知道再有哪一个)应该尽可能在库中实现新功能,而 ..
发布时间:2020-09-27 06:49:35 C/C++开发

无叠层协程与叠层协程有何不同?

背景: 我之所以问这个问题,是因为我目前有一个具有许多(数百至数千)线程的应用程序。这些线程中的大多数在大部分时间都处于空闲状态,等待将工作项放入队列中。当一个工作项可用时,然后通过调用一些任意复杂的现有代码来对其进行处理。在某些操作系统配置上,应用程序会遇到控制最大用户进程数的内核参数,因此,我想尝试减少工作线程数的方法。 我建议的解决方案: 这似乎是基于协程的方法,我用协程替 ..
发布时间:2020-09-26 23:27:12 C/C++开发

直接在asio堆栈式协程中使用spawn安全吗?

当我使用spawn在协程中启动新的stackfull协程时,valgrind说很多使用未初始化的值( valgrind输出). 然后我使用io_service.post调用处理程序,并在其中启动一个新的stackfull协程,一切似乎都很好. 我已经搜索并阅读了一些文档,但是找不到有关如何在全栈协程中安全地创建新的全栈协程的信息. 这是代码: #include ..
发布时间:2020-09-22 05:09:00 C/C++开发

使用Gevent和WSGI阻止呼叫

我刚刚开始使用协程,并阅读了gevent和greenlets.为了进行测试,我通过gevents pywsgi模块提供了以下代码: from gevent.pywsgi import WSGIServer import gevent def hello_world(env, start_response): gevent.sleep(5) start_response('2 ..
发布时间:2020-09-21 22:42:46 其他开发

扫描器与解析器的交互

我是flex/bison的新手.在阅读书籍时,似乎在几乎所有编译器实现中,解析器都以“协程"方式与扫描程序交互,即只要解析器需要令牌,它就会调用扫描程序获取令牌,并在忙碌时将扫描程序放在一边移位/减少.一个自然的问题是,为什么不让扫描程序整体生成令牌流(从输入字节流),然后将整个令牌流传递给解析器,因此在两者之间没有明确的交互.他们俩?好吧,我可以想象这种方式存在一些缺点,并且我也可以看到这样做的 ..

生成器功能和异步生成器功能的用途有什么区别

在Python中,异步生成器函数是协程,生成器函数也是协程. 生成器功能和异步生成器功能的用途有什么区别? 谢谢. 解决方案 PEP 525-异步生成器与 PEP 255非常相似- -简单的生成器,其中引入了生成器.主要目的是使事情更容易实现,仅在不同的域(异步域)中才能实现.从PEP 525: 从本质上讲,适用于异步执行情况的PEP 255的目标和基本原理也适用于该建议 ..
发布时间:2020-09-13 06:23:41 Python