2010-12-05 64 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类来设置工作队列并让工作线程池从中拉出。