我正在阅读关于 gevent 的tutorial,它提供了同步和异步案例演示的示例代码:
import gevent
import random
def task(pid):
"""
Some non-deterministic task
"""
gevent.sleep(random.randint(0,2)*0.001)
print('Task', pid, 'done')
def synchronous():
for i in range(1,10):
task(i)
def asynchronous():
threads = [gevent.spawn(task, i) for i in xrange(1000)]
gevent.joinall(threads)
本文解释了'异步情况下的执行顺序基本上是随机的,并且异步情况下的总执行时间远小于同步情况'。 所以我用 time 模块来测试它:
print('Synchronous:')
start1 = time.clock()
synchronous()
end1 = time.clock()
print "%.2gs" % (end1-start1)
print('Asynchronous:')
start2 = time.clock()
asynchronous()
end2 = time.clock()
print "%.2gs" % (end2-start2)
但是,“异步”运行的时间比“同步”长得多:
ubuntu@ip:/tmp$ python gevent_as.py
Synchronous:
0.32s
Asynchronous:
0.64s
ubuntu@ip:/tmp$ python gevent_as.py
Synchronous:
0.3s
Asynchronous:
0.61s
我想知道我的测试程序有什么损坏?感谢。
答案 0 :(得分:1)
time.clock()的问题,在 ubuntu 下无法正常工作。有关详细信息,请参阅链接:Python - time.clock() vs. time.time() - accuracy?
我改变了测试程序:
print('Synchronous:')
start1 = time.time()
synchronous()
end1 = time.time()
print "%.2gs" % (end1-start1)
print('Asynchronous:')
start2 = time.time()
asynchronous()
end2 = time.time()
print "%.2gs" % (end2-start2)
然后'异步'的测试速度比'同步'快得多:
ubuntu@ip:/tmp$ python gevent_as.py
Synchronous:
1.1s
Asynchronous:
0.057s
答案 1 :(得分:0)
可能睡眠非常小而且开销很重要。尝试用0.1替换0.001。