Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 17, 2016 01:48:41

alhimik7
Зарегистрирован: 2016-08-16
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Multiprocessing и тормозящий поток

Здравствуйте!
Написал маленькую прогу которая выполняет расчеты и в конце пишет результаты в эксель.
Встала проблема: при помощи модуля 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)

Офлайн

#2 Авг. 17, 2016 04:06:25

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Multiprocessing и тормозящий поток

А в Calculate Что?



Офлайн

#3 Авг. 17, 2016 05:29:06

alhimik7
Зарегистрирован: 2016-08-16
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Multiprocessing и тормозящий поток

.

Отредактировано alhimik7 (Авг. 20, 2016 05:46:43)

Офлайн

#4 Авг. 22, 2016 01:35:39

NikolayNemtsev
Зарегистрирован: 2016-08-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Multiprocessing и тормозящий поток

Доброго времени суток !
Пытаюсь реализовать метод выделения огибающей широкополосного сигнала в питоне , метод разрабатывал в матлабе , теперь пытаюсь сделать тоже самое в питоне , питон совершенно не знаю , подскажите пожалуйста сайты или литературу в которой можно найти информацию .
Нужно ли ставить специализированный радиопакет или можно обойтись стандартными функциями ?

Офлайн

#5 Авг. 22, 2016 09:35:31

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Multiprocessing и тормозящий поток

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

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

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

Лучше создавать новый топик а не лепить все в одну кучу.
А Чем дело с многопоточностью кончилось?



Отредактировано doza_and (Авг. 22, 2016 09:45:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version