Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在同步和异步情况之间使用time.clock()进行错误的速度测试?_Python_Asynchronous_Time_Gevent - Fatal编程技术网

Python 在同步和异步情况之间使用time.clock()进行错误的速度测试?

Python 在同步和异步情况之间使用time.clock()进行错误的速度测试?,python,asynchronous,time,gevent,Python,Asynchronous,Time,Gevent,我正在阅读一篇关于gevent的文章,它为同步和异步案例的演示提供了示例代码: 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

我正在阅读一篇关于gevent的文章,它为同步和异步案例的演示提供了示例代码:

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)
本文解释了“异步情况下的执行顺序基本上是随机的,异步情况下的总执行时间远远少于同步情况”。 所以我用时间模块来测试它:

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
ubuntu@ip:/tmp$ python gevent_as.py
Synchronous:
1.1s
Asynchronous:
0.057s

我想知道我的测试程序出了什么问题?谢谢。

可能睡眠时间很短,是日常事务。尝试将0.001替换为0.1。

可能睡眠时间很小,并且会增加开销。尝试用0.1替换0.001。

这是time.clock()的问题,它在ubuntu下不能正常工作。有关详细信息,请参阅链接:

我更改了测试程序:

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:
0.32s
Asynchronous:
0.64s
ubuntu@ip:/tmp$ python gevent_as.py
Synchronous:
0.3s
Asynchronous:
0.61s
ubuntu@ip:/tmp$ python gevent_as.py
Synchronous:
1.1s
Asynchronous:
0.057s
这是time.clock()的问题,它在ubuntu下不能正常工作。有关详细信息,请参阅链接:

我更改了测试程序:

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:
0.32s
Asynchronous:
0.64s
ubuntu@ip:/tmp$ python gevent_as.py
Synchronous:
0.3s
Asynchronous:
0.61s
ubuntu@ip:/tmp$ python gevent_as.py
Synchronous:
1.1s
Asynchronous:
0.057s