python eventlet-何时使用tpool VS Greenpool
我的理解是,tpool为您提供了一个本机线程池,而Greenpool为您提供了一个绿色线程池(基本上所有绿色线程都在一个本机线程中)python eventlet-何时使用tpool VS Greenpool,python,threadpool,eventlet,Python,Threadpool,Eventlet,我的理解是,tpool为您提供了一个本机线程池,而Greenpool为您提供了一个绿色线程池(基本上所有绿色线程都在一个本机线程中) tpool def my_func(start_ident): print "start_ident:%s" % start_ident print "running in new thread: %s %s" % (start_ident != thread.get_ident(),
- tpool
结果:不同的本机线程def my_func(start_ident): print "start_ident:%s" % start_ident print "running in new thread: %s %s" % (start_ident != thread.get_ident(), thread.get_ident()) tpool.execute(my_func, thread.get_ident()
start_ident:140735259603328 running in new thread: True 4616945664
- 绿池
结果:绿色线程在同一个本机线程中运行def worker(line): print "worker in thread %s" % thread.get_ident() return line pool = GreenPool() for result in pool.imap(worker, open("test.txt", 'r')): print result
worker in thread 140735259603328 worker in thread 140735259603328 worker in thread 140735259603328 worker in thread 140735259603328 .......
有人能告诉我什么时候使用一个游泳池和另一个游泳池吗。在完美世界[3],你只需要
GreenPool
。但当您调用某些不可避免的阻塞代码时:
文件[1]打开
- 具有大量CPU工作的C扩展,如
或lxml
numpy
- 使用阻塞套接字的C扩展,如
mysqldb
open('/dev/null',rb')
在大多数情况下会更便宜;打开('/mnt/nfs/file',rb')时连接远程服务器可能需要一段时间
[1] 处理文件既有异步选项,也有非阻塞选项。不幸的是,对于Linux,除了tpool
之外,我不知道还有什么解决方案可以真正替代open
[2] 这只有通过检测、测量和观察指标才能知道。在这个领域里,有很多糟糕的软件和很棒的软件,你至少应该用一些东西来知道确切的数字。“感觉很慢”不是一个信息。“上次发布后平均响应时间下降了20%”更有用
[3] 完美世界的例子:Erlang、Go、Haskell