Написал маленькую прогу которая выполняет расчеты и в конце пишет результаты в эксель.
Встала проблема: при помощи модуля multiprocessing запускаю количество потоков равное количеству доступных ядер процессора. Однако 1 - 2 потока тормозятся и судя по выводу в процентах в консоль того на сколько каждый процесс выполнился, выполняются ровно столько же сколько выполнялись подавляющее большинство потоков до них(него). То есть имеем 8 ядер, 6 потоков выполнились, завершили свою работу, а два только начали выполняться. Пробовал уменьшить количеств потоков на два(8 ядер проца, 6 потоков), эффект тот же.В чем может быть проблема?
Спасибо!!!
Ключевой фрагмент:
StartTime = time.clock() Ticks = [] for line in open('ticks.txt'): Ticks.append(float(line)) worker_count = cpu_count() print ("worker_count",worker_count) print("worker_count-2", worker_count-1) Steps = (EndInaquality - StartInaquality)//(worker_count-1) IncrementStepValue = (EndInaquality - StartInaquality)//(worker_count-1) print("IncrementStepValue:",IncrementStepValue) tmpStartValueLWMA1 = StartValueLWMA1 tmpStartValueLWMA2 = StartValueLWMA2 tmpStartInaquality = StartInaquality tmpEndInaquality = tmpStartInaquality + IncrementStepValue num = 0 jobs = [] for i in range(worker_count-1): p = Process(target=Calculate, args=(num,StartTime,Stats,Ticks,Steps,tmpStartValueLWMA1,StartValueLWMA1, EndValueLWMA1,tmpStartValueLWMA2,StartValueLWMA2,EndValueLWMA2,tmpStartInaquality,tmpEndInaquality)) jobs.append(p) p.start() num += 1 tmpStartInaquality += IncrementStepValue print("tmpStartInaquality += IncrementStepValue:",tmpStartInaquality) if(tmpEndInaquality > EndInaquality): tmpEndInaquality = EndInaquality print("tmpEndInaquality = EndInaquality:",tmpEndInaquality) else: tmpEndInaquality += IncrementStepValue print("tmpEndInaquality += IncrementStepValue:",tmpEndInaquality) print (p) for w in jobs: w.join() print (w)