Я написал скрипт, который просматривает файлы в некотором каталоге, запускает поток и что-то делает с файлами.Поскольку это длительные и дорогостоящие операции, я ограничил число потоков на один меньше числа процессоров, найденных на данной машине, на которой я его запускаю.Затем он постоянно проверяет количество активных потоков и, если есть свободные места, запускает другой поток.Для функции, которая возвращает число процессоров на машине, я использовал this .
ncpus = detectCPUs()
for (dirpath, dirnames, filenames) in os.walk(path_to_root):
for filename in filenames:
while True:
if threading.activeCount() < ncpus - 1:
MyThread(dirpath, filename).start()
break
else:
time.sleep(100)
Я не могу избавиться от ощущения, что в библиотеке threading
есть функцииили в другом месте Python, который автоматически сделал бы это для меня без необходимости следить за количеством потоков и процессоров.Кто-нибудь знает что-нибудь?Или указав, как опытные ветераны это сделают?
Некоторые ограничения.На общих машинах, которые я использую, установлен только Python 2.5, и у меня нет прав root для установки.Так что о multiprocessing
или о хороших библиотеках, требующих Python 2.6 или выше, не может быть и речи.