2015-06-08 2 views
3
from threading import Thread 
class MyClass: 
    #... 
    def method2(self): 
     while True: 
      try: 
       hashes = self.target.bssid.replace(':','') + '.pixie' 
       text = open(hashes).read().splitlines() 
      except IOError: 
       time.sleep(5) 
       continue 
     # function goes on ... 

    def method1(self): 
     new_thread = Thread(target=self.method2()) 
     new_thread.setDaemon(True) 
     new_thread.start() # Main thread will stop there, wait until method 2 

     print "Its continues!" # wont show =(
     # function goes on ... 

Возможно ли это? After new_thread.start() Основная тема ждет, пока это не закончится, почему это происходит? Я не предоставлял new_thread.join() нигде.новые резьбовые блоки основная резьба

Daemon не решает проблему, потому что моя проблема в том, что Main thread останавливается сразу после запуска нового потока, а не потому, что выполнение основного потока завершено.

ответ

8

Как написано, вызов к Thread конструктора вызоваself.method2 вместо ссылки на него. Замените target=self.method2() на target=self.method2, и потоки будут работать параллельно.

Обратите внимание, что в зависимости от ваших потоков вычисления ЦП могут по-прежнему быть сериализованы из-за the GIL.

+0

Спасибо! Иногда я просто не могу найти некоторые из этих глупых ошибок. – psyskeptic

+0

Спасибо, ma niggi – Kroka

0

IIRC, это потому, что программа не выходит, пока все потоки не-daemon не завершили выполнение. Если вместо этого вы используете поток демона, он должен исправить эту проблему. Ответ на этот вопрос дает более подробную информацию о демонах нитях:

Daemon Threads Explanation

Смежные вопросы