我发现了Goroutines的python实现,https://goless.readthedocs.org/en/latest/并在玩

在文档中给出以下代码:

c1 = goless.chan()
c2 = goless.chan()

def func1():
    time.sleep(1)
    c1.send('one')
goless.go(func1)

def func2():
    time.sleep(2)
    c2.send('two')
goless.go(func2)

for i in range(2):
    case, val = goless.select([goless.rcase(c1), goless.rcase(c2)])
    print(val)

它打印:
one
two

有关select方法的文档



所以我继续将sleep(1)更改为sleep(3),如下所示:
c1 = goless.chan()
c2 = goless.chan()

def func1():
    time.sleep(3)
    c1.send('one')
goless.go(func1)

def func2():
    time.sleep(2)
    c2.send('two')
goless.go(func2)

for i in range(2):
    case, val = goless.select([goless.rcase(c1), goless.rcase(c2)])
    print(val)

我认为它会打印:
two
one

但它打印:
one
two

这是为什么?

最佳答案

由于没有答案,所以我去研究了项目仓库,在这里找到了一个类似的问题:

https://github.com/rgalanakis/goless/issues/42

最值得注意的是:



因此,似乎我误解了goless会创建不同的线程,但是我错了。

关于python - 了解goless.select从示例代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31467321/

10-16 08:49