Найти - Пользователи
Полная версия: Не понял многопоточность (threading)
Начало » Python для новичков » Не понял многопоточность (threading)
1 2 3
FishHook
Pironity
А смотрю, вы ох…енно понимаете многопоточность, вам преподавать надо, а не вопросы на форумах задавать. И зря вы говорите “весьма отдаленно понимаю”, у вас буквально энциклопедические знания, не понимаю чем тут можно было бы помочь и в чем у вас вообще проблемы.
Pironity
FishHook
PironityА смотрю, вы ох…енно понимаете многопоточность, вам преподавать надо, а не вопросы на форумах задавать. И зря вы говорите “весьма отдаленно понимаю”, у вас буквально энциклопедические знания, не понимаю чем тут можно было бы помочь и в чем у вас вообще проблемы.
Что ж, я пообщался с вами на вашем языке и вас бомбануло. Надеюсь, вы теперь поняли, что прежде чем писать, надо подумать.
PEHDOM
Pironity
В реальных задачах в основном заполняются файлы или таблицы. Но там та же тенденция.
Так может у вас узкое место рбота с файловой системой? тоесть проц считает быстро, а вот на диск оно писать быстрее не может хоть миллион потоков заведите..
Pironity
PEHDOM
Так может у вас узкое место рбота с файловой системой?
Фс - tmpfs в ОЗУ. Скорость записи ~ 2,2 Gib/s. Я провел профилирование и дело оказалось именно в функциях, задействованных при обработке данных. Да и если бы дело было в скорости записи, то оба варианта вели бы себя примерно одинаково, без такой существенной разницы.
vic57
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])
>>> 

Pironity
vic57
да ну?
Странно. В интерпритаторе видит, а при выполнении через python/pypy нет… Разберусь позже, что там.
vic57
тебя в гугле банят?
 one two
Rodegast
Твоя основная ошибка в том что ты создаёшь большое количество потоков/процессов, а это влечёт большое количество накладных расходов. Нужно список listNums разбить на 2 части и скормить каждую часть отдельному потоку.
vic57
тут неплохая статья с бенчмарками
 есть библиотека 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 часть заданий 
                )
в варианте multiprocessing наблюдаю в top 4 питона, но надо тестировать под конкретную задачу -
тут вычислений нет, только закачка страниц
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