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
テストプログラムの何が問題になっているのか知りたいですか?ありがとう。