У меня есть следующий код Python:Почему питон gevent.joinall выполнить все greenlets
>>> import gevent
>>> from gevent import monkey; monkey.patch_all()
>>>
>>> def fooFn(k):
... return 'gevent_'+k
...
>>> threads = []
>>> threads.append(gevent.spawn(fooFn,'0'))
>>> threads.append(gevent.spawn(fooFn,'1'))
>>>
>>> gevent.joinall([threads[1]])
>>>
>>> print threads[1].value
gevent_1
>>> print threads[0].value
gevent_0
>>>
Как видно выше, threads[0].value
получил надлежащее значение из fooFn
. Это означает, что была выполнена фишка threads[0]
.
Почему это произошло, когда я пропустил только роду threads[1]
до gevent.joinall
?
Как я могу убедиться, что выполнены только эти зеленые, которые фактически переданы в gevent.joinall
?
'gevent.joinall()' только ждет, что зеленые точки переданы в качестве параметров для завершения и соединяет его с основным потоком. Насколько мне известно, он не блокирует выполнение каких-либо других потоков - просто говорит основному потоку не выходить, пока зеленые панели не закончатся. –