Уведомления

Группа в Telegram: @pythonsu

#1 Июль 19, 2020 14:01:03

Marat__
Зарегистрирован: 2020-06-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Параллельное программирование

Есть такое дело:

         for item_fi in all__1:
            my_func()
  #          thread.start_new_thread(my_func,)
где all__1 лист из пары сотен значений.
Хочу распараллеливать цикл, то есть часть набора из all__1 считать на разных ядрах (вручную я это делал запуская несколько питонов в разных терминалах и каждому указывая свой набор all__1, что некрасиво). Попытки прикрутить thread.start_new_thread (закоментено) не прошли. Также не зашел multiprocessing (процесс зависал, может потому что работаю под виндоус). Задачка простенькая, а я уже второй день не могу ее решить. Может кто что подсказать? Спасибо

Отредактировано Marat__ (Июль 19, 2020 14:02:10)

Офлайн

#2 Июль 19, 2020 17:02:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Параллельное программирование

В питоне этого сделать нельзя, забудь



Офлайн

#3 Июль 19, 2020 22:55:22

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

Параллельное программирование

Ну почему нельзя. Питон отлично запустит кучу тредов, другое дело что это ничего не ускорит.

Я бы рекомендовал почитать.
https://docs.python.org/3/library/concurrent.futures.html

Если функции на питоне то используйте ProcessPoolExecutor

Marat__
процесс зависал, может потому что работаю под виндоус
Под виндами
1 помоему надо специально скрипт оформлять, чтобы было if __main__.
2 Передаваемые аргументы очевидно должны уметь пиклиться.
3. Давненько пробовал под виндой использовать multiprocessing Оказалось что процессы в виндоусе запускаются безумно долго, доходило до 80 мс (в юникс системах если данных немного то запуск процесса мало чем отличается от треда). Это под windows 7 было. Может сейчас что и поменялось, но винды уж нет, не попробуешь.



Офлайн

#4 Июль 20, 2020 14:00:47

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Параллельное программирование

FishHook
Хочу распараллеливать цикл, то есть часть набора из all__1 считать на разных ядрах
doza_and
Ну почему нельзя.
разве можно?



Офлайн

#5 Июль 20, 2020 14:23:33

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Параллельное программирование

> разве можно?

Можно, только через multiprocessing. Но ожидать от распараллеливания через процессы какой-то эффективности не стоит.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июль 20, 2020 14:23:55)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version