Простая потоковая обработка в Python 2.6 с помощью thread.start_new_thread ()

Я следую учебнику по простой нарезке. Они приводят этот пример, и когда я пытаюсь его использовать, я получаю непонятные ошибки от интерпретатора. Не могли бы вы рассказать мне, почему это не работает? Я нахожусь в WinXP SP3 w / Python 2.6 current

import thread def myfunction(mystring,*args): print mystring if __name__ == '__main__': try: thread.start_new_thread(myfunction,('MyStringHere',1)) except Exception as errtxt: print errtxt 

Выполнение этого результата:

Необработанное исключение в потоке, запущенном Error in sys.excepthook:

Исходным исключением было:

Информация, отсутствующая в ошибке, фактически отсутствует на выходе.

  • Удаление пробелов в строке XML
  • Объект Map не имеет len () в Python 3.3
  • Разбор пользовательских URI с urlparse (Python)
  • Как я могу избежать двоеточий в имени атрибута с ElementTree Python?
  • Получение функции Python для чистого возврата скаляра или списка, в зависимости от количества аргументов
  • Как удалить все символы после определенного символа в python?
  • AttributeError: объект 'module' не имеет атрибута 'pydebug'
  • Обработка больших плотных матриц в python
  • 5 Solutions collect form web for “Простая потоковая обработка в Python 2.6 с помощью thread.start_new_thread ()”

    Проблема в том, что ваш основной поток прекратил работу до того, как ваш новый поток успеет закончить. Решение состоит в том, чтобы ждать вашего основного потока.

     import thread, time def myfunction(mystring,*args): print mystring if __name__ == '__main__': try: thread.start_new_thread(myfunction,('MyStringHere',1)) except Exception, errtxt: print errtxt time.sleep(5) 

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

     from threading import Thread def myfunction(mystring,*args): print mystring if __name__ == '__main__': try: Thread(target=myfunction, args=('MyStringHere',1)).start() except Exception, errtxt: print errtxt 

    Вам нужно подождать, пока ваш Thread завершит свою работу, поэтому вам нужно использовать Thread.join ():

     from threading import Thread def myfunction(mystring,*args): print mystring if __name__ == '__main__': try: t = Thread(None,myfunction,None,('MyStringHere',1)) t.start() t.join() except Exception as errtxt: print errtxt 
     import thread def myfunction(mystring,*args): print mystring if __name__ == '__main__': try: thread.start_new_thread(myfunction,('MyStringHere',1)) except Exception as errtxt: print errtxt while 1: pass 

    Положите цикл while, наконец, он будет работать для вас.

    Когда я запускал этот код в Python 2.6, он работал, возможно, у вас есть уже открытые потоки, которые заблокированы функцией? Я рекомендую полностью закрыть Python, проверив ваши запущенные процессы, чтобы убедиться, что ничего не работает, и повторите попытку.

    Я попробовал его в Python 2.5 на Mac, после смены

     except Exception as errtxt: 

    в

     except Exception, errtxt: 

    Программа не выдавала исключения, но ничего не печатала. Не уверен, что это полезно, но мне это любопытно …

    Python - лучший язык программирования в мире.