Python相当于Lua协程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python相当于Lua协程?相关的知识,希望对你有一定的参考价值。

我一直在Lua从事积木游戏。核心游戏代码在主游戏循环中使用协程,以等待诸如按下输入或计时器完成之类的事件。我正在考虑将其切换到Python,以使其更加可移植,但我不知道如何正确使用asyncawait,以等同于Lua的协程。

以下代码是Lua中的一个简单协程示例。在使用相同的代码的同时,我该如何用Python编写相同的代码?

function myCoroutine(arg1)

    print(arg1)
    local newValue = coroutine.yield(arg1 + 2)
    print(newValue)

    local lastValue = coroutine.yield(arg1 * newValue^2)
    print(lastValue)


end


local co = coroutine.create(myCoroutine)

local success, yield1 = coroutine.resume(co, 10)
local success, yield2 = coroutine.resume(co, yield1 * 2)
coroutine.resume(co, yield2 / 3)

预期输出:

10
24
1920
答案

实际上非常相似:

def myCoroutine():

    arg1 = (yield)
    print(arg1)

    newValue = (yield arg1 + 2)
    print(newValue)

    lastValue = (yield arg1 * newValue ** 2)
    print(lastValue)

co = myCoroutine()
co.send(None) # "prime" the coroutine
try:
    yield1 = co.send(10)
    yield2 = co.send(yield1 * 2)
    co.send(yield2 // 3)
except StopIteration:
    pass

以上是关于Python相当于Lua协程?的主要内容,如果未能解决你的问题,请参考以下文章

ngx_lua 模块详细讲解

Nginx-ngx_lua模块原理和内置函数

lua协程实现

[xlua]探索笔记之协程

LUA协程

Lua中的协程coroutine