このコードは何も出力しません:
def foo(i):
print i
def main():
pool = eventlet.GreenPool(size=100)
for i in xrange(100):
pool.spawn_n(foo, i)
while True:
pass
しかし、このコードは数字を出力します:
def foo(i):
print i
def main():
pool = eventlet.GreenPool(size=100)
for i in xrange(100):
pool.spawn_n(foo, i)
pool.waitall()
while True:
pass
唯一の違いはpool.waitall()
. 私の考えでwaitall()
は、プール内のすべてのグリーンスレッドが機能し終わるまで待機することを意味しますが、無限ループはすべてのグリーンスレッドを待機するため、pool.waitall()
必要ありません。
では、なぜこれが起こるのですか?
参照: http://eventlet.net/doc/modules/greenpool.html#eventlet.greenpool.GreenPool.waitall