标签: coroutine

"yield"关键字有什么作用?

yieldPython中关键字的用途是什么?它有什么作用?

例如,我试图理解这段代码1:

def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild  
Run Code Online (Sandbox Code Playgroud)

这是来电者:

result, candidates = [], [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
    candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Run Code Online (Sandbox Code Playgroud)

_get_child_candidates调用该方法时会发生什么?列表是否返回?单个元素?它又被召唤了吗?后续通话何时停止?


1.代码来自Jochen Schulz(jrschulz),他为度量空间创建了一个很棒的Python库.这是完整源代码的链接:模块mspace.

python iterator yield generator coroutine

9664
推荐指数
46
解决办法
212万
查看次数

什么是协程?

什么是协程?它们如何与并发相关?

terminology coroutine

181
推荐指数
8
解决办法
6万
查看次数

线和光纤有什么区别?

线和光纤有什么区别?我听说过来自红宝石的纤维,我读过听过它们有其他语言版本,有人可以用简单的语言向我解释一下螺纹和纤维之间有什么区别.

multithreading coroutine fiber

167
推荐指数
9
解决办法
4万
查看次数

140
推荐指数
6
解决办法
4万
查看次数

138
推荐指数
3
解决办法
3万
查看次数

格林莱特与 主题

我是gevents和greenlets的新手.我找到了一些关于如何使用它们的好文档,但是没有一个能让我证明我应该如何以及何时使用greenlets!

  • 他们真正擅长什么?
  • 在代理服务器中使用它们是不是一个好主意?
  • 为什么不是线程?

我不确定的是,如果它们基本上是共同惯例,它们如何为我们提供并发性.

python concurrency coroutine gevent greenlets

130
推荐指数
4
解决办法
4万
查看次数

StartCoroutine/yield返回模式如何在Unity中真正起作用?

我理解协程的原理.我知道如何让标准StartCoroutine/ yield return模式在Unity中的C#中工作,例如调用一个方法返回IEnumeratorvia StartCoroutine并在该方法中执行某些操作yield return new WaitForSeconds(1);,等待一秒,然后执行其他操作.

我的问题是:幕后真的发生了什么?什么是StartCoroutine真的?什么IEnumeratorWaitForSeconds恢复?如何StartCoroutine将控制权返回到被调用方法的"其他"部分?所有这些如何与Unity的并发模型相互作用(在不使用协同程序的情况下,许多事情同时发生)?

c# coroutine unity-game-engine

124
推荐指数
4
解决办法
7万
查看次数

Kotlin协同程序中的launch/join和async/await之间有什么区别

kotlinx.coroutines库中,您可以使用launch(with join)或async(with await)启动新的协同程序.他们之间有什么区别?

asynchronous coroutine kotlin kotlin-coroutines

122
推荐指数
6
解决办法
2万
查看次数

等效的C++到Python生成器模式

我有一些示例Python代码,我需要在C++中模仿它.我不需要任何特定的解决方案(例如基于协同例程的产量解决方案,尽管它们也是可接受的答案),我只需要以某种方式重现语义.

蟒蛇

这是一个基本的序列生成器,显然太大而无法存储物化版本.

def pair_sequence():
    for i in range(2**32):
        for j in range(2**32):
            yield (i, j)
Run Code Online (Sandbox Code Playgroud)

目标是维护上面序列的两个实例,并以半锁步方式迭代它们,但是以块为单位.在下面的示例中,first_pass使用对序列来初始化缓冲区,并second_pass重新生成相同的精确序列并再次处理缓冲区.

def run():
    seq1 = pair_sequence()
    seq2 = pair_sequence()

    buffer = [0] * 1000
    first_pass(seq1, buffer)
    second_pass(seq2, buffer)
    ... repeat ...
Run Code Online (Sandbox Code Playgroud)

C++

我在C++中找到解决方案的唯一方法就是模仿yieldC++协同程序,但我没有找到关于如何做到这一点的任何好的参考.我也对这个问题的替代(非一般)解决方案感兴趣.我没有足够的内存预算来保存传递之间序列的副本.

c++ python yield generator coroutine

101
推荐指数
5
解决办法
4万
查看次数

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

什么是中的协同程序?

它与"Parallelism2"或/和"Concurrency2"的不同之处(见下图)?

以下图片来自ISOCPP.

https://isocpp.org/files/img/wg21-timeline-2017-03.png

在此输入图像描述

c++ coroutine c++20

84
推荐指数
2
解决办法
4万
查看次数