На удивление, на такую простую вещь как создание потоков, потратил пару часов, из-за обилия в интернетиках примеров с ошибками в коде. Потому привожу рабочий пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
#!/usr/local/bin/python # coding=utf-8 import threading import time debug=True #количество одновременно запускаемых потоков thread_count=10; def putlog(txt): if (debug==True): print txt def worker(th): putlog("--стартовал поток "+str(th)); i=0 while i<config.thread_count: putlog("--поток "+str(th)+", шаг "+str(i)) time.sleep(1) i=i+1 def main(): putlog("-скрипт стартовал!"); #запускаем потоки for i in xrange(thread_count): thread = threading.Thread(target=worker, args=(i,)).start() #ждем пока потоки завершатся while threading.active_count() >1: putlog("!ждем завершения потоков") time.sleep(1) putlog("-скрипт закончил работу!"); main() |
Результат работы скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
-скрипт стартовал! --стартовал поток 0 --поток 0, шаг 0 --стартовал поток 1 --поток 1, шаг 0 --стартовал поток 2 !ждем завершения потоков --поток 2, шаг 0 --поток 0, шаг 1 !ждем завершения потоков --поток 1, шаг 1 --поток 2, шаг 1 --поток 0, шаг 2 !ждем завершения потоков--поток 1, шаг 2 --поток 2, шаг 2 !ждем завершения потоков -скрипт закончил работу |