Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 18, 2018 19:22:47

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

Не понял многопоточность (threading)

Pironity
А смотрю, вы ох…енно понимаете многопоточность, вам преподавать надо, а не вопросы на форумах задавать. И зря вы говорите “весьма отдаленно понимаю”, у вас буквально энциклопедические знания, не понимаю чем тут можно было бы помочь и в чем у вас вообще проблемы.



Офлайн

#2 Фев. 18, 2018 19:26:53

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

Не понял многопоточность (threading)

FishHook
PironityА смотрю, вы ох…енно понимаете многопоточность, вам преподавать надо, а не вопросы на форумах задавать. И зря вы говорите “весьма отдаленно понимаю”, у вас буквально энциклопедические знания, не понимаю чем тут можно было бы помочь и в чем у вас вообще проблемы.
Что ж, я пообщался с вами на вашем языке и вас бомбануло. Надеюсь, вы теперь поняли, что прежде чем писать, надо подумать.

Офлайн

#3 Фев. 18, 2018 19:41:45

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Не понял многопоточность (threading)

Pironity
В реальных задачах в основном заполняются файлы или таблицы. Но там та же тенденция.
Так может у вас узкое место рбота с файловой системой? тоесть проц считает быстро, а вот на диск оно писать быстрее не может хоть миллион потоков заведите..



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Фев. 18, 2018 19:50:48

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

Не понял многопоточность (threading)

PEHDOM
Так может у вас узкое место рбота с файловой системой?
Фс - tmpfs в ОЗУ. Скорость записи ~ 2,2 Gib/s. Я провел профилирование и дело оказалось именно в функциях, задействованных при обработке данных. Да и если бы дело было в скорости записи, то оба варианта вели бы себя примерно одинаково, без такой существенной разницы.

Отредактировано Pironity (Фев. 18, 2018 19:51:54)

Офлайн

#5 Фев. 18, 2018 21:18:14

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Не понял многопоточность (threading)

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])
>>> 

Офлайн

#6 Фев. 18, 2018 21:42:43

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

Не понял многопоточность (threading)

vic57
да ну?
Странно. В интерпритаторе видит, а при выполнении через python/pypy нет… Разберусь позже, что там.

Офлайн

#7 Фев. 18, 2018 22:03:14

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Не понял многопоточность (threading)

тебя в гугле банят?
 one two

Офлайн

#8 Фев. 19, 2018 10:44:30

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

Не понял многопоточность (threading)

Твоя основная ошибка в том что ты создаёшь большое количество потоков/процессов, а это влечёт большое количество накладных расходов. Нужно список listNums разбить на 2 части и скормить каждую часть отдельному потоку.



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

Офлайн

#9 Фев. 19, 2018 14:29:15

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Не понял многопоточность (threading)

тут неплохая статья с бенчмарками
 есть библиотека 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 питона, но надо тестировать под конкретную задачу -
тут вычислений нет, только закачка страниц

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version