Форум сайта python.su
Pironity
А смотрю, вы ох…енно понимаете многопоточность, вам преподавать надо, а не вопросы на форумах задавать. И зря вы говорите “весьма отдаленно понимаю”, у вас буквально энциклопедические знания, не понимаю чем тут можно было бы помочь и в чем у вас вообще проблемы.
Офлайн
FishHookЧто ж, я пообщался с вами на вашем языке и вас бомбануло. Надеюсь, вы теперь поняли, что прежде чем писать, надо подумать.
PironityА смотрю, вы ох…енно понимаете многопоточность, вам преподавать надо, а не вопросы на форумах задавать. И зря вы говорите “весьма отдаленно понимаю”, у вас буквально энциклопедические знания, не понимаю чем тут можно было бы помочь и в чем у вас вообще проблемы.
Офлайн
PironityТак может у вас узкое место рбота с файловой системой? тоесть проц считает быстро, а вот на диск оно писать быстрее не может хоть миллион потоков заведите..
В реальных задачах в основном заполняются файлы или таблицы. Но там та же тенденция.
[code python][/code]
Офлайн
PEHDOMФс - tmpfs в ОЗУ. Скорость записи ~ 2,2 Gib/s. Я провел профилирование и дело оказалось именно в функциях, задействованных при обработке данных. Да и если бы дело было в скорости записи, то оба варианта вели бы себя примерно одинаково, без такой существенной разницы.
Так может у вас узкое место рбота с файловой системой?
Отредактировано Pironity (Фев. 18, 2018 19:51:54)
Офлайн
Pironityда ну?
Проверить не смог, т.к.
module ‘numpy’ has no attribute ‘arange’
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> numpy.arange(0,100) array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]) >>>
Офлайн
vic57Странно. В интерпритаторе видит, а при выполнении через python/pypy нет… Разберусь позже, что там.
да ну?
Офлайн
Твоя основная ошибка в том что ты создаёшь большое количество потоков/процессов, а это влечёт большое количество накладных расходов. Нужно список listNums разбить на 2 части и скормить каждую часть отдельному потоку.
Офлайн
тут неплохая статья с бенчмарками
есть библиотека joblib для распараллеливания задач
пробовал на таком примере
from joblib import Parallel, delayed import requests # собственно задача для распараллеливания: сайт один, но страницы будем запрашивать одновременно. def func(n): url = 'http://poesy.su/tag/stihi-klassikov/page/{}/'.format(n) resp = requests.get(url) return resp.status_code def parallel(n_tasks, backend, verbose=0): result = Parallel( n_jobs=-1, # использовать все доступные ядра backend=backend, # бэкенд, может быть 'multiprocessing', 'threading' и 'sequential'(это последовательное выполнение - используется для теста) verbose=verbose # уровень подробности: сколько заданий показывать в логе )( # это генераторное выражение, которое формирует задания с функциями для выполнения delayed(func)(i) for i in range(1,n_tasks) ) print(result) if __name__ == "__main__": n_tasks = 100 for backend in ['multiprocessing', 'threading', 'sequential']: print('---------',backend,'---------') parallel(n_tasks, backend, verbose=n_tasks//10 # отображать только 1/10 часть заданий )
Офлайн