2011-01-31 17 views
0

私はスレッドのPythonスクリプトを作成しようとしています。このスクリプトはURLのリストを繰り返し処理し、それぞれを別のスレッドで開きます。Python - スレッドスクリプトでリストを反復する

from BeautifulSoup import BeautifulSoup 
from threading import Thread 
import mechanize 

tickers = ["aapl", "siri", "goog", "intc"] 
nextTicker = 0 

def quotes(i): 
    br = mechanize.Browser() 
    br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10')] 
    r= br.open('http://finance.yahoo.com/q?s=' + tickers[nextTicker]) 
    html = r.read() 
    soup = BeautifulSoup(html) 
    price = soup.findAll('span', attrs={"id":"yfs_l10_" + tickers[nextTicker]}) 
    price = price[0].string 
    print price 

for i in range(4): 
    t = Thread(target=quotes, args=(i,)) 
    t.start() 

私は、各スレッドがティッカーという名前のリストからユニークなティッカーシンボルをつかむとなるように、私はそこにnextTicker = nextTicker + 1を必要とするが、私はこれをどこに置くか、または各スレッドが取得されていることを確認する方法を確認していないことを知っています一意のURL。

今すぐスクリプトを実行すると、4つすべてのスレッドのリストからインデックス0の項目だけが取得されます。各スレッドがリスト内の次のアイテムを取得してベースURLに追加するようにするにはどうすればよいですか?

答えて

3

スレッド固有のデータが必要な場合は、引数に渡します。

だから

for ticker in tickers: 
    t = Thread(target = quotes, args = (ticker,)) 

おそらくより良いまだ、チェックアウトeventletを使用し、いっそのティッカー[i]の代わりにティッカー

[nextTicker]

を使用しています。これは、このようなコードを書くことができますが、スレッドに関するいくつかの問題を回避します。

+0

ヘッドレップに関するヘッドアップに感謝します。私はそれをチェックし、私はそれを使って新しいスクリプトを作った。 –

2

nextTicker変数に干渉してロックするなどの代わりに、tickers[i]を参照してください。 (または、さらに良いことに、それだけでティッカー自体を渡してください)

関連する問題