私はPython2.7を使用してgaeでアプリを開発していましたが、ajax呼び出しはAPIからいくつかのデータを要求し、1回の要求には最大200ミリ秒かかる可能性がありますが、2つのブラウザーを開いて、非常に近い時間に2つの要求を行うと、その2倍、すべてをスレッドに入れようとしましたが、機能しませんでした。(これは、開発サーバーだけでなく、アプリがオンラインの場合に発生します)
だから私はこれが一般的にPythonの問題であるかどうかを確認するためにこの簡単なテストを書きました(ビジーウェイトの場合)、ここにコードと結果があります:
def work():
t = datetime.now()
print threading.currentThread(), t
i = 0
while i < 100000000:
i+=1
t2 = datetime.now()
print threading.currentThread(), t2, t2-t
if __name__ == '__main__':
print "single threaded:"
t1 = threading.Thread(target=work)
t1.start()
t1.join()
print "multi threaded:"
t1 = threading.Thread(target=work)
t1.start()
t2 = threading.Thread(target=work)
t2.start()
t1.join()
t2.join()
mac os x、core i7(4コア、8スレッド)、python2.7での結果:
single threaded:
<Thread(Thread-1, started 4315942912)> 2011-12-06 15:38:07.763146
<Thread(Thread-1, started 4315942912)> 2011-12-06 15:38:13.091614 0:00:05.328468
multi threaded:
<Thread(Thread-2, started 4315942912)> 2011-12-06 15:38:13.091952
<Thread(Thread-3, started 4323282944)> 2011-12-06 15:38:13.102250
<Thread(Thread-3, started 4323282944)> 2011-12-06 15:38:29.221050 0:00:16.118800
<Thread(Thread-2, started 4315942912)> 2011-12-06 15:38:29.237512 0:00:16.145560
これはかなり衝撃的です!1つのスレッドでこれを行うのに5秒かかる場合、2つのスレッドを同時に開始すると、両方のタスクを完了するのに同じ時間がかかると思いましたが、ほぼ3倍の時間がかかります。これにより、スレッドのアイデア全体が役に立たなくなります。それらを順番に実行する方が高速です。
ここで何が欠けていますか。