gevent和线程性能比较?

时间:2014-04-14 08:52:44

标签: python multithreading gevent

我写了一个测试用例来比较线程和gevent的性能,
使用多线程执行如下任务:

import time
import threading

def sync_task():
    #do something
    time.sleep(1)

def multi_thread_run():
    start = time.time()
    for i in range(10):
        t = threading.Thread(target=sync_task)
        t.start()
    end = time.time()
    print("multi thread task executed in %f second"%(end-start))

打印:

multi thread task executed in 0.002425 second

但是,使用gevent替换线程执行相同的任务:

import gevent
def async_task():
    #do something
    gevent.sleep(1)

def async_run():
    start = time.time()
    coroutins = []

    for i in range(10):
        coroutins.append(gevent.spawn(async_task))
    gevent.joinall(coroutins)

    end = time.time()
    print("async task executed in %f second"%(end-start))

打印:

async task executed in 1.002012 second

在很多博文中我看到coroutine比mutilthread更有效,在这种情况下,如何解释它?

1 个答案:

答案 0 :(得分:1)

那是因为你没有join你的Thread - 这意味着程序没有等待线程完成执行,而是几乎立即结束。 / p>