У меня есть программа, которая мне нужна для сбора и отображения данных, и я имею дело с огромным количеством данных, поэтому я использую многопоточность, чтобы ускорить ее.
Проблема в том, что иногда выполняется отладка 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()
?