Threading.start () не всегда начинает процесс потока - PullRequest
0 голосов
/ 30 мая 2019

У меня есть программа, которая мне нужна для сбора и отображения данных, и я имею дело с огромным количеством данных, поэтому я использую многопоточность, чтобы ускорить ее.

Проблема в том, что иногда выполняется отладка thread.start() не будет немедленно вызывать thread.run(), как следует.

Иногда thread.start() будет немедленно вызывать thread.run(), в других случаях будет вызван thread.run () после того, как thread2.run() завершит выполнение, например.

Иногда кажется, что thread.run() никогда не вызывается, и программа пытается выйти из потока при попытке присоединиться к потокам.

def do_work(self, values, toSearch):
    threads = []
    for i in range(3):
        query = MyThreadClass(values, toSearch)
        query.start()
        threads.append(query)

    for t in threads:
        t.join()
        if t.is_alive():
            print "Thread is still alive!"
#           At this point at least one thread is still alive often, however
#           not ALL the time

Я ожидаю, что каждый вызов query.start() будет выполняться query.run() немедленно, кроме случаев, когда это не так.

К тому времени, когда я доберусь до .join(), и поток все еще жив, у моей программы истечет время ожидания.

Отладка показывает, что каждый вызов run() будет остановлен, как и должно быть., но те, которые никогда не вызывали run(), не будут остановлены и зависают на join().

Почему это происходит / как я могу исправить тайм-ауты на join()?

...