我有以下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]
greenlet被執行。
爲什麼當我只通過threads[1]
greenlet到gevent.joinall
?
我如何確保只有那些實際上傳遞給gevent.joinall
的greenlet被執行?
'gevent.joinall()'只等待傳入的greenlet作爲參數完成並加入到主線程中。據我所知,它不會阻止任何其他線程的執行 - 只是告訴主線程在greenlet運行完成之前不要退出。 –