2010-12-05 63 views
0

所以我有以下程序:Python線程:只有兩個活動線程,我如何獲得更多?

https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py

然而,當它的運行我只得到兩個活動線程在運行,我怎樣才能讓這個有運行多個線程。我試過做類似urlv2 = birdofprey(ip2)的地方,其中ip2 = str(host+1)然而,它只是最終發送到兩個線程相同的東西。任何幫助,將不勝感激。

謝謝,

回答

1

活動計數= 2表示您有一個您的設計線程(birdofprey)和主線程。這是因爲您使用鎖定,所以第二個birdofprey線程等待第一個等。我沒有深入到算法中,但似乎你不需要鎖定birdofprey線程,因爲它們不共享任何數據(我可能弄錯了)。如果他們共享,則應該獨佔訪問共享數據,而不要鎖定整個run

在評論更新

  1. 刪除鎖定(如果不存在共享數據storage_i不是共享數據。);
  2. for loop`創建線程,啓動它們,附加到列表中;
  3. 使第二個循環遍歷線程列表,請致電join收集您需要的信息。
1

線75,urlv.join()塊,直到該線程完成。所以你實際上創建了一個線程,等待它完成,然後開始下一個線程。另一個線程是主線程。

+0

好吧,我在那裏爲了能夠總結`storage_i`的值,現在如果我不能用`urlv.join()`做到這一點,那很好。這似乎是這樣的,但後來的問題是 - 啊,我不知道我犯了一個錯誤,問題是它只讀了'ip`爲9,但是這是因爲我沒有使用`self.ip `這是我應該使用的。好吧,如果我保留`urlv.join()`,那麼沒有辦法獲得多個線程?由於刪除它會阻止主線程找到變量`storage_i`。謝謝。 – eWizardII 2010-12-05 19:25:52

+0

您只需*開始所有線程*,然後加入它們。要做到這一點,你必須把每個啓動的線程放在一個列表中,然後加入它們中的每一個。你也應該閱讀線程介紹,這不是一個你可以猜測自己的方式的主題 - 請參閱khachik的答案。 – 2010-12-05 19:33:16

0

我認爲問題是你需要將urlv.join()從for循環中取出。現在,由於加入,您需要等待新線程完成才能開始下一個線程。

但是對於一般的可讀性,可維護性等,您可能需要考慮使用Python的Queue類來設置工作隊列並讓工作線程池從中拉出。