2017-02-19 6 views
2

Итак, моя цель состоит в том, чтобы функция do_something() запускала собственный поток, так что do_something() может работать параллельно, а не ждать окончания предыдущего. Проблема в том, что похоже, что это не многопоточность (это означает, что один поток заканчивается до начала другого).Запуск нескольких потоков одновременно

for i in range(len(array_of_letters)): 

    if i == "a": 
     t = threading.Thread(target=do_something()) 

     print "new thread started : %s"%(str(threading.current_thread().ident))  
     t.start() 

У меня также есть current_thread().ident внутри функции do_something() но похоже идентичность потока, который запускается так же, как в основном потоке, что скрипт Питон работает с. Я думаю, что мой подход неверен.

+0

@ Жан-Франсуа Фабр правильно, я считаю, о насущной проблеме. Даже с этим исправлением вы должны знать, что в потоках Python не выполняются одновременно, поскольку в большинстве случаев интерпретатор Python не может интерпретировать одновременно два или несколько разных потоков выполнения (и имеет что-то, называемое GIL (Global Interpreter Lock). Вместо этого происходит то, что он запускает один поток, пока он не блокирует ожидающий общий ресурс, не выполняет ввод/вывод или не вызывает вызов (sleep), и только после этого он переключается на запуск другого (если есть), который ждет своей очереди. – martineau

ответ

3

Это обычное дело и легко попасть за ошибку.

target=do_something() просто выполняет ваши функции сразу в главном потоке и передает None (возвращающееся значение вашей функции я полагаю) в качестве target функции к нити, которая не вызвать какую-либо видимых ошибку; но и ничего не делает.

вы должны пройти действительную функцию не результат:

t = threading.Thread(target=do_something) 

будет работать лучше

+0

Работал как шарм, спасибо !!!! –

+0

Да, одна из злых пар токенов '()' и '[]' stroke again - приятное объяснение IMO. – Dilettant