Найти - Пользователи
Полная версия: Multiprocessing и тормозящий поток
Начало » Python для экспертов » Multiprocessing и тормозящий поток
1
alhimik7
Здравствуйте!
Написал маленькую прогу которая выполняет расчеты и в конце пишет результаты в эксель.
Встала проблема: при помощи модуля 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)
doza_and
А в Calculate Что?
alhimik7
.
NikolayNemtsev
Доброго времени суток !
Пытаюсь реализовать метод выделения огибающей широкополосного сигнала в питоне , метод разрабатывал в матлабе , теперь пытаюсь сделать тоже самое в питоне , питон совершенно не знаю , подскажите пожалуйста сайты или литературу в которой можно найти информацию .
Нужно ли ставить специализированный радиопакет или можно обойтись стандартными функциями ?

doza_and
NikolayNemtsev
или можно обойтись стандартными функциями ?
Для обработки сигналов с большими объемами данных обычный питон будет слишком медленным. Не факт что нужен специальный пакет для радиосигналов, я кстати таких и не знаю. Обычно достаточно numpy scipy для работы с таблицами многие используют pandas, но он тяжеловат. В этих пакетах есть и signal processing.

Если писали раньше на matlab то по всей видимости программа перенесется практически без изменений строчка в строчку. Смотрите numpy for matlab users.

Еще я бы советовал совершенно не использовать exel для хранения и обработки данных, это очень неудобно.
Хранить данные лучше в обычных таблицах (csv), а еще лучше в hdf5.
Для просмотра и отрисовки графиков можно использовать matplotlib. Все вместе можно интегрировать в интерактивном режиме при помощи Jupiter или IPYthon notebooks

Лучше создавать новый топик а не лепить все в одну кучу.
А Чем дело с многопоточностью кончилось?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB