再び私からの質問..いくつかの問題が再び発生しています。もっと賢くてこれを知っている人を見つけたい.. :D
現在、(1,1000) の範囲のスレッド URL を開くと、実際にすべての異なる URL を表示したいというスレッドの問題が発生しています。コードを実行したときにのみ、多くの double 変数を取得します (おそらく、クロールが高速になるためです)。とにかく、これは私のコードです。どのスレッドにあるかを確認しようとしましたが、2倍になります。
import threading
import urllib2
import time
import collections
results2 = []
def crawl():
var_Number = thread.getName().split("-")[1]
try:
data = urllib2.urlopen("http://www.waarmaarraar.nl").read()
results2.append(var_Number)
except:
crawl()
threads = []
for n in xrange(1, 1000):
thread = threading.Thread(target=crawl)
thread.start()
threads.append(thread)
# to wait until all three functions are finished
print "Waiting..."
for thread in threads:
thread.join()
print "Complete."
# print results (All numbers, should be 1/1000)
results2.sort()
print results2
# print doubles (should be [])
print [x for x, y in collections.Counter(results2).items() if y > 1]
ただし、xrange 行の直下に time.sleep(0.1) を追加すると、それらの double は発生しません。これは私のプログラムを大幅に遅くしますが。これを修正するより良い方法を知っている人はいますか?