Я обнаружил реализация питон Goroutines, https://goless.readthedocs.org/en/latest/ и с игройПоймите goless.select из примера кода
Учитывая следующий код из документации:
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
Выберите первый случай, который будет готов. Если присутствует случай по умолчанию (goless.dcase), верните его, если другие случаи не готовы. Если нет чехла по умолчанию и корпус не готов, заблокируйте до тех пор, пока не станет готово.
Так что я пошел вперед и изменить 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
Почему?
попробуйте спать 2000 мс и 3000 мс в гортанах. Я думаю, результат будет два-> один. –
синхронизация по времени не синхронизация. Я не знаю, почему это не работает, но вы не должны спать, чтобы попытаться установить случившееся раньше гарантии - это не детерминировано. – thwd