Панно своими руками из ниток: 7 мастер-классов с фото и видео

Содержание

7 мастер-классов с фото и видео

Панно «Сердце» из ниток своими руками

Чтобы иметь представление о технике стринг арта, следует понять её главный принцип: в качестве основы всегда выбирается твёрдая поверхность, в которую вбиваются гвозди, а между ними определённым образом натягиваются нитки. Получается объёмная картинка, как бы заштрихованная цветом, сочетающая в себе брутальность и воздушность.

Сперва расскажем о самом простом способе создания панно для начинающих. Такую поделку можно смастерить вместе с ребенком: ему очень понравится натягивать нити, ведь в результате гарантированно получится живописная картина.

Инструменты и материалы

Чтобы сделать панно из гвоздей и ниток своими руками, потребуется:

  • Деревянная основа: дощечка из мягкого дерева, фанера, пробка или спил. Бамбуковая доска не подойдёт – гвозди входят в неё слишком тяжело. Если в качестве основы взять пенопласт, то молоток не потребуется, но натяжение нити должно быть слабым.
  • Пряжа. Сгодится мулине, бечевка или нити для вязания: они должны быть крепкими, так как единственный разрыв может испортить всю поделку.
  • Бумага и карандаш.
  • Много маленьких гвоздиков. Их длина зависит от толщины основы.
  • Молоток.
  • Пассатижи.

 Пошаговая инструкция

Начните создание простой картины из гвоздей и ниток с рисунка:

  1. Вырезаем сердце (или любую другую геометрическую фигуру) из бумаги. Если деревянная дощечка имеет шероховатости или дефекты, следует обработать её наждачной бумагой. Прикладываем трафарет на гладкую поверхность основы. Если нужно, наклейте шаблон на доску с помощью двустороннего скотча. Обводим сердце простым тонким карандашом.

  2. Рисуем точки по линии на равном расстоянии друг от друга. Вбиваем гвоздики.

  3. Лучше всего придерживать гвозди пассатижами: так вы не пораните пальцы, а гвозди будут вбиты на одинаковой высоте.

  4. Когда каркас будет готов, закрепляем конец нити на одном из гвоздиков и начинаем протягивать нитки через другие гвозди. Следим, чтобы сердце было заштриховано равномерно, а нитки всегда были натянуты.

  5. Когда работа будет окончена, аккуратно закрепляем конец нити.

На фото готовое панно, которое украсит любой интерьер. Основу можно защитить лаком, морилкой или покрыть акриловой краской.

Панно из гвоздей и ниток в виде головы оленя

Посмотрев это видео, вы сможете самостоятельно сделать картину с одним из наиболее популярных сегодня изображений. Постеры и фигурки оленя особенно ценятся в интерьерах, выдержанных в скандинавском стиле. В процессе создания использована фанера, чёрная ткань, зафиксированная мебельным степлером, гвозди и контрастные белые нити. Готовая поделка выглядит очень эффектно. 

Для создания графичных картин в виде оленя, волка или кошки можно воспользоваться следующими шаблонами:

Панно с надписью из ниток и гвоздей

Освоив простые фигуры, можно переходить к более сложным композициям. Из уже знакомых материалов можно составить любую надпись, которая будет смотреться стильно и интересно. 

На фото изделие в технике стрит арт с надписью «Радость» на английском языке.

Инструменты и материалы

Для создания надписи понадобятся:

  • Доска.
  • Крепкие разноцветные нити.
  • Небольшие гвозди одинакового размера.
  • Молоток.
  • Пассатижи.
  • Эскиз с надписью.
  • Двусторонний скотч.

Пошаговая инструкция

  1. Приступаем к работе. Надпись можно нарисовать от руки или найти подходящий шаблон и распечатать. Вырезаем бумажный трафарет, отступая от контура рисунка. Приклеиваем бумагу к доске на двусторонний скотч.
  2. Гвозди вбиваются аккуратно, на равном расстоянии друг от друга. На поверхности должно оставаться 5–9 мм. Желательно использовать пассатижи или щипцы. Убираем шаблон. Кусочки бумаги, оставшиеся на основе, аккуратно вынимаем пинцетом.

  3. Нитки натягиваем так, чтобы гвозди не загибались, но и не допускаем «провисания» рисунка.

  4.  Чтобы поменять цвет, конец старой нитки завязываем узелком и покрываем клеем. Новый цвет начинаем с крепкого узла, фиксируем клеем и продолжаем наматывать нити. Хвостики обрезаем и подклеиваем. Надпись готова.

  5. Для завершения композиции многие мастера делают окантовку. Она может быть контрастной или в цвет надписи. Для этого гвоздики оплетаются «змейкой». Иногда контур делают из более плотной и толстой нити, декоративно обводя буквы:

Имя ребёнка, сделанное из ниток, может служить отдельным украшением интерьера детской комнаты. Также надписью можно дополнить более сложную композицию в виде ключницы или вешалки для одежды. 

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

Поделка string art в смешанной технике

Ещё одно оригинальное панно из гвоздей и ниток, сделанное своими руками. Для его изготовления понадобилась доска, краска, искусственные цветы и гирлянда на батарейках.

Для изготовления панно можно использовать живописные спилы дерева:

Многоцветное панно из ниток и гвоздей

Для плетения животных, которые будут великолепно смотреться в детской комнате, потребуются нитки несколько оттенков.

 Инструменты и материалы

Набор для изготовления всё тот же:

  • Деревянная основа.
  • Любой бумажный шаблон с животными.
  • Гвоздики.
  • Молоток.
  • Разноцветные нити.
  • Пассатижи.
  • Ножницы.

Рекомендации

В качестве образца можно взять рисунки, приведённые ниже, либо самостоятельно найти примеры в интернете.

  1. Распечатываем шаблон необходимого размера, прикладываем к доске.
  2. Забиваем гвозди на равном расстоянии друг от друга.
  3. Чтобы сэкономить время, при плетении можно использовать деталь от обычной канцелярской ручки. Для этого необходимо продеть нить сквозь трубочку. Тонкий конец ручки позволяет нити проходить даже через плотно посаженые гвоздики – это помогает при «штриховке» мельчайших элементов рисунка.

  4. Для создания совы понадобятся нити пяти цветов: синие, голубые, белые, оранжевые и чёрные. Рекомендуем наматывать нити в определённой последовательности. Сначала закрашиваем синими нитками голову и крылья. Затем меняем цвет на голубой и переходим к брюшку и участкам вокруг глаз. Следующий этап – чёрно-белые глаза. В последнюю очередь наматываем клюв и лапки.

Для создания многослойных картин из ниток и гвоздей необходимо подготовить гвозди подлиннее. На этом примере хорошо видно, что сначала нужно заполнить нижний, а затем верхний слой:

Ещё одна идея многослойного трёхцветного панно из гвоздей и ниток:

Отточив своё мастерство, профессионалы создают настоящие шедевры:

На фото впечатляющая композиция в технике стринг арт. Здесь наматывание ниток происходит не хаотично, а по определённой схеме.

Вот несколько популярных схем для создания панно из гвоздей и ниток – с их помощью рисуются симметричные узоры:

Панно воздушный шар

Готовое произведение в технике стринг арт станет отличным подарком. В этом мастер классе описано создание панно из гвоздей и ниток в виде разноцветного аэростата:

По завершении работы покрасьте шляпки гвоздей в цвет ниток по контуру рисунка – тогда поделка будет выглядеть аккуратней.

Силуэтная картина с заполнением фона

Рассказываем, как сделать панно из ниток и гвоздей, где пустым остаётся центр композиции. Такая поделка выглядит ещё эффектнее.

Инструменты и материалы

Для создания картины в эко-стиле понадобится:

  • Дощечка с грубой текстурой дерева.
  • Контрастные нитки.
  • Гвозди.
  • Молоток.
  • Бумага и карандаш.

Пошаговая инструкция

Приступаем к созданию панно из ниток и гвоздей:

  1. Рисуем понравившийся силуэт дерева на бумаге.

  2. Прибиваем гвозди, ориентируясь на карандашный рисунок.

  3. Прибиваем гвозди по периметру доски, отступая от края одинаковое расстояние:

  4.  Так выглядит промежуточный результат:

  5. Закрепляем узелок на одном из гвоздей, обрезая хвостик нитки:

  6. Наматываем нити, переходя к внешним гвоздям по краю дощечки, тем самым заполняя фон:

  7. Вынимаем бумагу:

  8. Следим за равномерностью заполнения фона:

  9. Когда пробелы будут заштрихованы, работу можно заканчивать. Завязываем конец нитки и закрепляем его клеем:

Для создания картины можно выбрать любой понравившийся силуэт:

На фото композиция с изображением ёлок. Эта работа более тонкая, поэтому автор использовал самые маленькие гвоздики. В отличие от картины из мастер-класса, нити натянуты ещё и по периметру доски, оплетая квадратный контур. Такая работа выглядит более завершённой.

Панно в технике стринг арт можно дополнить декоративными элементами: бусинами, веревками, кожаными ремешками:

Композиции, выполненные в направлении стринг арт, стали популярным трендом в ручном творчестве. Работы художников, использующих эту технику, широко представлены на международных выставках. Научиться данному виду искусства довольно просто: всё зависит от внимательности и усидчивости начинающего мастера.

Панно из ниток и гвоздей своими руками, 4 мастер-класса

String Art – это техника создания изображения с использованием нитей и гвоздей. На данный момент она набирает обороты популярности, ведь необычное – всегда вызывает интерес. В этой статье мы рассмотрим: как сделать панно из ниток и гвоздей в технике Стринг Арт своими руками.

Содержание

  • 1 Креативное панно
    • 1.1 Мастер-класс
  • 2 Олень
    • 2.1 Мастер-класс
  • 3 Цифра
    • 3.1 Мастер-класс
  • 4 Сердце
    • 4.1 Мастер-класс
  • 5 Схемы
  • 6 Шаблоны
  • 7 Идеи

Креативное панно

Вам понадобится: фанера, акриловая белая краска, кисть, молоток, гвозди, нитки, карандаш, линейка, липкая лента, 6 белых листов формата А4.

Мастер-класс

  1. Покрасьте фанеру белой краской, затем оставьте высыхать.
  2. Распечатайте шаблон по этой ссылки.
  3. Склейте 6 листов между собой, как показано на изображении.
  4. Поместите шаблон на фанеру и закрепите липкой лентой.
  5. Забейте гвозди по обозначенным точкам на одинаковой глубине.
  6. Снимите бумажный шаблон.
  7. Оплетите буквы ОК, затем заполните нитками основной фон, ориентируясь по фото-инструкции.
  8. Проплетите нитками серединку буквы О.

Креативное панно из ниток и гвоздей готово!

Олень

Вам понадобится: деревянная доска 20х30см, гвозди, хлопчатые чёрные нити, акриловые краски чёрного и белого цвета, кисточки, молоток.

Мастер-класс

  1. Покрасьте дощечку белой акриловой краской, затем дождитесь высыхания.
  2. Распечатайте шаблон контурного оленя.
  3. Приложите шаблон на доску, зафиксируйте его, чтобы он был неподвижен.
  4. Возьмите один гвоздь и молоток, затем проделайте лёгкие отверстия под гвозди и снимите шаблон.
  5. Забейте гвозди в намеченные точки на одинаковую глубину.
  6. Обмотайте чёрной ниткой контур оленя и его рогов, как показано на изображении.
  7. Обмотайте чёрной ниткой внутренней контур оленя, придерживаясь чётких геометрических линий.
  8. Обмотайте нос и рога дополнительным слоем ниток.
  9. Покрасьте чёрной акриловой краской шляпки гвоздей, используя тонкую жёсткую кисть.

Геометрическое панно «Олень» из ниток и гвоздей готово! Рекомендую к просмотру данное видео!

Картина из НИТОК и ГВОЗДЕЙ ☆ Подарок своими руками


Watch this video on YouTube

Цифра

Вам понадобится: дощечка либо пенокартон, цветная бумага, канцелярские булавки либо гвоздики, плотные нити, ножницы, клей, шаблон цифры.

Мастер-класс

  1. Распечатайте и вырежьте цифру.
  2. Наклейте на дощечку бумагу.
  3. Положите шаблон цифры на дощечку и вставьте гвоздики по контуру.
  4. Уберите шаблон.
  5. Намотайте нитки на гвоздики в хаотичном порядке.

Цифра в технике String Art готова!

Сердце

Вам понадобится: хлопчатые белые нити, гвозди, молоток, лист бумаги, простой карандаш, ножницы, атласная лента чёрного цвета.

Мастер-класс

  1. Сложите лист бумаги пополам и нарисуйте половинку сердца.
  2. Вырежьте и разверните его.
  3. Расчертите засечки по контуру сердца на одинаковом расстоянии.
  4. Приложите бумажное сердце к дощечке и вбейте гвоздики по контуру шаблона параллельно на одинаковой глубине.
  5. Уберите шаблон сердца.
  6. Намотайте нить на самый нижний гвоздик, затем обмотайте контур сердца.
  7. Сделайте вертикально-параллельную намотку, затем горизонтальную придерживаясь фото-инструкции, данное сердце заполнено намоткой нитей в 4х разных направлениях.
  8. Завяжите бант из ленты, затем прикрепите его украсив сердце.

Сердце в технике String Art готово! Рекомендую к просмотру данное видео!

❤ DIY ❤ Подарок на День Святого Валентина ❤ St. Valentine Gift


Watch this video on YouTube

Схемы

Существуют различные схемы наматывания ниток на гвозди. Самая популярная – это хаотичная схема. В ней Вы можете наматывать нити, как захочется. Этим способом пользуются не только новички, а и талантливые мастера. С остальными схемами Вы можете ознакомиться, просмотрев фото-галерею.

Шаблоны

Идеи

Держатели нитей и как сделать их самостоятельно — NeedlenThread.com

Как насчет небольшого разговора об инструментах?

Использование аксессуаров — увлекательная часть многих видов декоративно-прикладного искусства. Конечно, вы можете выполнять рукоделие с самыми основами. Хотите вышивать вручную? Все, что вам на самом деле нужно, это игла, немного ниток, что-то для вышивания (обычно ткань) и способ обрезать нитки. Вам не нужно ничего другого.

Но есть инструменты, облегчающие наше рукоделие. Есть инструменты, которые улучшают результат нашего рукоделия. И есть инструменты, которые делают наше рукоделие более увлекательным. Итак, аксессуары! И это все часть удовольствия от вышивки.

Когда я на днях убирал кучу тредов — да, у меня есть беспорядки! – Мне попались нитки, которые я купил некоторое время назад, но еще не использовал по ряду причин. И это привело меня к тому, что я сделал свой собственный набор ниток. И это привело меня к мысли, что я должен поделиться ими с вами. И это привело меня к этой статье! Итак, мы здесь!

Давайте начнем с основ и продолжим дальше.

Что такое Thread Keep?

Держатель нити — это инструмент, который «удерживает» нить — организующий (или декоративный, или и то, и другое) инструмент, используемый для удерживания нити — обычно обрезающий нить. Обычно мы думаем о них как о том, о чем мы говорим ниже, но на самом деле сохранение потока не обязательно должно включать дыры. Это может быть инструмент, на который вы наматываете нитки. И инструмент можно сделать из любого подходящего материала — от перламутра до дерева, пластика, металла и бумаги.

Вы, наверное, видели, например, устройства для намотки нитей, которые производит Саджу. Они сделаны из очень плотного картона. Вы можете увидеть целую кучу их, доступных здесь, в Tres Chic Stitchery, если вы не уверены, о чем я говорю.

Давным-давно я писал об организации тредов и создании собственного треда здесь. В этой статье самое первое изображение — перламутровая нить от Kelmscott Designs. Я также рассказала о том, как использовала перламутровое кольцо в моем маленьком войлочном наборе инструментов, чтобы удерживать нити. Такие перламутровые кольца очень хороши тем, что держат нить. Они также доступны через Kelmscott Designs.

Таким образом, «сохранение потока» — довольно общий термин. Я думаю, что у большинства вышивальщиков это ассоциируется с чем-то с отверстиями в нем, но я в значительной степени отношу любое устройство, на котором вы можете держать обрезанные нити, к хранению нити.

Эти три темы выше являются теми, которые спровоцировали эту статью. Они производятся компанией Whimsical Edge Designs и распространяются компанией Kelmscott Designs.

Мне нравится, как эти нити держат. Я очень хочу их любить, но у них есть несколько недостатков.

Если бы я мог пощупать их до того, как купил, возможно, я бы их не купил. Мое первое впечатление о них, когда я взял их в руки, было не таким уж хорошим. Немного поиграв с ними, я думаю, что буду использовать их только для некоторых (ограниченных) потоков, но не для всех потоков.

Резьбовые держатели сделаны из дерева, и я думаю, что это именно дерево, называемое луан. Это несколько пористая, легкая фанерная плита. У него есть своего рода врожденная хрупкость в том, как он выглядит и ощущается — почти как если бы он был склонен к расщеплению. Это напоминает мне внутреннюю часть бара Butterfinger.

Из-за типа дерева оно кажется шероховатым на ощупь, и я действительно не думаю, что столяр может каким-либо образом добиться гладкости стекла с помощью этого материала. Это фанера, так что к тому времени, когда она будет отшлифована в надежде на гладкую поверхность, вы все равно уже будете в следующем слое доски. И занозистые канавки и впадины, которые проходят через него, наводят меня на мысль, что такое усилие было бы невозможно.

Мне нравится гладкая как стекло поверхность, которую можно получить с хорошо обработанным куском твердой древесины. Я не уверен, почему я ожидал, что с этими конкретными цепочками потоков, но я думаю, что это связано с тем фактом, что цепочки потоков предназначены для удержания потоков. И обрывы ниток. Поэтому, когда я прочитал слово «дерево» в описании, я предположил, что это гладкая древесина.

Когда я впервые почувствовал, что нить держится, у меня упало сердце. Я сразу понял, что это не тот инструмент, на который я бы поставил большинства потоков. Я даже не решался использовать их для обычной хлопковой нити, но, как оказалось, это единственная нить (эта и хлопковая перле), с которой я бы их использовал.

Я попробовал их с флошем, который представляет собой гораздо более мягкую хлопковую нить, и вытягивание отдельной нити из держателя добавляет нитке немного пуха. Так что, к сожалению, я не буду использовать их для чего-то более мягкого, чем хлопковая нить или жемчуг. Я бы не стал использовать их, например, с флошем или хлопком, а о шелках и речи быть не может.

Несмотря на это ограничение, эти треды по-прежнему радуют меня, когда я их вижу. Мне нравится их! Мне нравится эта милая овечка с цветочным задником! А мне нравятся ульи. А мне нравятся птицы.

Все это делает меня счастливым, и именно поэтому я купил их в первую очередь.

Но, когда дело доходит до дела, я действительно предпочитаю делать свои собственные крепления для своих проектов, если я работаю с обрезанными нитками.

Создание собственных сохранений тем

В начале этой статьи я дал ссылку на старый пост, в котором я рассказываю о создании собственных сохранений тем.

Это экономичный способ организовать обрезку нитей для любого проекта. Но ваш тред не должен быть скучным. Это не обязательно должен быть обычный белый картон. Вы можете одеть его!

Итак, для этого мы предлагаем вам бесплатную распечатку DIY Thread Keep. Вот что вы можете сделать из него:

Чтобы сделать свой, я напечатал лист (на котором есть три декоративные полоски) на толстом картоне. Я вырезала декоративные полоски и приклеила их ленточным клеем к другому листу картона, чтобы придать ниткам двойную толщину и прочность. Когда я использовал полосовой клей, я избегал области за кругами дырокола. Это темные круги диаметром 3/8″, которые вы вырезаете, чтобы продеть нитки в отверстия.

Приклеив полоски к новому картону, я обрезал новый картон до того же размера, что и полоски, а затем использовал дырокол 3/8 дюйма (продается в отделе скрапбукинга в любом магазине товаров для рукоделия) и пробил вне кругов. Чтобы пробить круги точно в нужном месте, если вы перевернете дырокол и поместите дизайн лицевой стороной вверх (но дырокол перевернут), вы можете совместить отверстие в инструменте для дырокола с цветным пятном на нитке.

.

Я использовал пробелы над каждым отверстием, чтобы указать номер цвета нитей, которые я хотел использовать.

Наконец, я использовал обычный дырокол (который вы используете для офисной работы), чтобы пробить маленькое отверстие на левой стороне нитенаправителя, чтобы я мог продеть ленту и повесить нитенаправитель, если я хотеть. Я также могу использовать ленту, чтобы сгруппировать две или три нити вместе. Вы также можете использовать переходное кольцо, чтобы сгруппировать несколько самодельных нитей вместе.

Это простой и экономичный способ упорядочить обрезанные нити для вышивальных проектов. На самом деле, это мой любимый способ организации предварительно обрезанных нитей, когда я вышиваю!

Надеюсь, вам понравится распечатка!

Если у вас есть какие-либо вопросы, комментарии или предложения по хранению ниток и организации обрезков нитей для вышивальных проектов, пожалуйста, пишите нам!

Теги
ресурсы для вышивкисоветы и рекомендации по вышивкеинструменты для рукоделияорганизациянитки

 

<  Предыдущий пост

Следующий пост  >

 

Что быстрее, нити Python или процессы? Некоторые проницательные примеры | Джеймс Фултон

Серия примеров, объясняющих преимущества и недостатки потоков по сравнению с процессами.

С кодом Dask для ваших собственных экспериментов.

Photo by Jonathan Kemper on Unsplash

Если вы читаете это, вы, вероятно, пытались понять, в чем разница между потоками и процессами в Python и когда вы должны использовать каждый из них. Чтобы объяснить некоторые из ключевых отличий, я покажу несколько примеров функций и проанализирую, сколько времени требуется для их выполнения с использованием как потоков, так и процессов. Важно отметить, что я расскажу о том, почему потоки и процессы имеют разные тайминги в каждом случае.

Я собираюсь использовать Dask для запуска примеров функций с использованием потоков и процессов. Более подробная информация о том, как это сделать с помощью Dask, находится внизу статьи. Сейчас я сосредоточусь на различиях между потоками и процессами.

Давайте начнем с простой функции, всего лишь Python for-loop . Он принимает аргумент n , который представляет собой целое число повторений в цикле.

 def basic_python_loop(n): 
"""Запускает простой собственный цикл Python, который занимает мало памяти
и не требует ввода или вывода данных."""
mydict = {}
for i in range(n):
mydict[ i%10] = i
return None

Эта функция создает словарь только из 10 элементов, поэтому использует очень мало памяти и не очень требовательна к процессору. На самом деле ваш компьютер будет тратить большую часть своего времени на интерпретацию кода Python, а не на его выполнение.

График ниже показывает время, необходимое для выполнения функции basic_python_loop(n=10_000_000) 16 раз. Для сравнения, запуск этой функции только один раз занял около 0,8 секунды.

Image by Author

На рисунке каждому из 16 вызовов функции присвоен номер задачи 1–16. Заштрихованная полоса оранжевого цвета показывает, когда начался и когда завершился вызов каждой функции. Например, задача 8 на левой панели началась примерно через 5 секунд после начала вычисления и выполнялась до 5,6 секунды. Синяя полоса вверху показывает все время, необходимое для выполнения всех 16 вызовов функций.

Три панели на рисунке показывают функции, использующие простой цикл, многопоточность и параллельную обработку.

Полное вычисление из 16 частей занимает столько же времени при использовании потоков, сколько и при использовании цикла. И что интересно, каждая из отдельных задач занимает намного больше времени с использованием потоков. Это связано с глобальной блокировкой интерпретатора (GIL) . В Python только один поток может читать код одновременно . Это основная функция языка Python, но большинство других языков программирования не имеют этого ограничения. Это означает, что другие статьи о многопоточности, которые вы читали, могут быть неприменимы к Python.

В Python потоки работают как команда поваров, совместно использующих одну книгу рецептов. Допустим, у них есть 3 блюда для приготовления (3 потока), и есть 3 повара (3 ядра на вашем компьютере). Повар прочитает одну строчку из рецепта, пойдет и завершит ее. После того, как они завершили шаг, они встают в очередь, чтобы прочитать следующий шаг. Если шаги в рецепте короткие (как в базовом цикле for в Python), повара выполнят их очень быстро и поэтому будут тратить большую часть своего времени, просто ожидая своей очереди, чтобы прочитать книгу рецептов. Таким образом, каждый рецепт занимает больше времени, чем если бы у повара был единственный доступ к книге.

Показанные выше 16 задач выполнялись с использованием 3 потоков, это означает, что одновременно обрабатываются 3 вызова функций (3 рецепта). Поскольку шаги просты (например, доступ к словарю), потоки тратят большую часть своего времени на ожидание чтения кода Python. Таким образом, хотя мы одновременно выполняем 3 вызова функций, выполнение каждого из них занимает в 3 раза больше времени. Так что здесь нет смысла использовать многопоточность!

На рисунке видно, что процессы были примерно в 3 раза быстрее, чем при использовании цикла или многопоточности для выполнения всех 16 задач. Каждая отдельная задача занимала столько же времени при запуске с использованием процессов, как и с использованием циклов. Это связано с тем, что каждый процесс имеет свой собственный GIL, поэтому процессы не блокируют друг друга, как потоки.

В Python параллельная обработка похожа на команду поваров, но у каждого повара есть собственная кухня и книга рецептов.

В этой функции мы загружаем случайно выбранный CSV из каталога. Все файлы CSV в каталоге имеют одинаковый размер.

 def load_csv(): 
"""Загрузить, но не возвращать файл CSV."""
# Выбрать случайный CSV из каталога
file = np.random.choice(glob.glob(f"{temp_dir}/*.csv"))
df = pd.read_csv(file)
return None
Изображение автора

Потоки и процессы заняли примерно столько времени, сколько каждый other, и оба были быстрее, чем использование цикла. В этой функции, в отличие от предыдущей, каждая задача, выполняемая потоками, занимает столько же времени, сколько и выполнение циклом. Но почему здесь GIL не замедляет потоки?

В этой функции большую часть времени тратится на выполнение строки pd.read_csv(file) . Эта функция заставляет Python запускать большой фрагмент кода C для загрузки данных из файла. При выполнении этого кода C поток освобождает интерпретатор Python, чтобы другие потоки могли читать код Python, и ему не нужно будет снова читать код Python, пока он не завершит загрузку. Это означает, что потоки не блокируют друг друга так сильно, как в предыдущем примере. Они не все борются за то, чтобы прочитать код сразу.

Большинство функций в NumPy, scipy и pandas написаны на C, поэтому они также заставляют потоки освобождать GIL и избегать блокировки друг друга.

В аналогии с рецептом и поваром это похоже на шаг в рецепте, который гласит: «месить тесто в течение 5 минут». Инструкция читается быстро, но занимает много времени.

Следующая функция использует NumPy для создания случайного массива и поиска его инверсии. По сути, это просто сложный вычислительный расчет.

 def numpy_cpu_heavy_function(n): 
"""Выполняет вычисления с интенсивным использованием ЦП, но не включает
ввод или вывод данных."""
x = np.linalg.inv(np.random.normal(0, 1, ( н, н)))
return None

Временные параметры этой функции показаны ниже с использованием n=2000 , так что массив имеет форму 2000×2000.

Image by Author

Как ни странно, мы не получили значительного ускорения ни при использовании потоков, ни при использовании процессов. Но почему? в предыдущих примерах мы получили ускорение в 3 раза, так как используемый компьютер имеет 3 ядра. Это связано с тем, что сам NumPy использует многопоточность и использует несколько ядер. Это означает, что когда вы пытаетесь запустить многие из этих функций NumPy параллельно, используя потоки или процессы, вы ограничены вычислительной мощностью. Каждое ядро ​​​​пытается привлечь дополнительные ядра для выполнения своего расчета NumPy. Поэтому, как только все ваши ядра работают на 100% скорости, вы не сможете получить от них больше вычислительной мощности.

До сих пор функции, которые мы использовали, либо не имели входных аргументов, либо входным аргументом было одно целое число. Ключевое различие между процессами и потоками проявляется, когда у нас есть значительные входные или выходные данные.

 def transfer_data(x): 
"""Передача данных в функцию и из нее."""
return x*2

В приведенной выше функции мы передадим массив x и вернем удвоенный массив . В приведенных ниже результатах x представлял собой массив размером 10 000 x 1000 и занимал 80 МБ памяти.

Изображение автора

В этом случае потоки выполнили задачу за 0,36 секунды, цикл занял 0,51 секунды, но процессы заняли в 14 раз больше времени. Это связано с тем, что каждый процесс имеет собственный отдельный пул памяти . Когда мы передаем массив x в функцию и запускаем ее с помощью процессов, x должны быть скопированы в каждый процесс из основного сеанса Python. Это заняло около 3,5 секунд. Как только массив был скопирован, процессы могли очень быстро удвоить массив, но затем потребовалось еще 3,5 секунды, чтобы скопировать удвоенные массивы обратно в основной сеанс. В отличие от этого, 9Потоки 0107 совместно используют то же пространство памяти, что и основной сеанс Python , поэтому нет необходимости копировать массив туда и обратно.

В аналогии с поваром процессы подобны трем поварам, каждый со своими книгами рецептов и собственными кухнями. Кухни находятся в разных местах, поэтому, если мы хотим, чтобы повара запускали какие-то рецепты, нам нужно отнести им ингредиенты, тогда они смогут приготовить блюдо, а нам нужно пойти и собрать посуду. Иногда проще использовать потоки и заставить их готовить блюда на одной кухне, даже если это означает, что они должны читать из одной и той же книги рецептов.

Подытожим:

  • GIL означает, что только один поток может одновременно читать код Python. Это означает, что несколько потоков могут блокировать друг друга.
  • Использование внешних вызовов кода C, например, в функциях NumPy, SciPy и pandas, означает, что потоки освобождают GIL во время выполнения этих функций. Это означает, что потокам меньше приходится ждать возможности прочитать код.
  • Каждый процесс имеет собственный пул памяти. Это означает, что копирование больших объемов данных в них или из них происходит медленно. Например, при выполнении функций на больших входных массивах или кадрах данных.
  • Потоки используют ту же память, что и основной сеанс Python, поэтому нет необходимости копировать данные в них или из них.

Это приводит к некоторым эмпирическим правилам для ускорения вычислений.

  • В первую очередь о передаче данных. Если ваши функции принимают или возвращают большие порции данных, используйте потоки; иначе вы потратите слишком много времени на передачу данных. Однако спросите себя, действительно ли вам нужны данные в качестве аргумента, могли бы вы загрузить данные внутрь функции? Если это так, то вы все равно можете использовать процессы.
  • Далее о циклах Python. Если ваша функция должна использовать простые нативные циклы Python, используйте процессы. Однако спросите себя, можно ли заменить эти циклы операциями с массивами NumPy? Если это так, вы все равно можете использовать потоки.
  • Если вы используете ресурсоемкие операции NumPy/и т. д., вы можете не получить многого от использования потоков или процессов.

Подробное описание Dask в этой статье сделало бы ее слишком длинной, поэтому вместо этого я расскажу об основных частях и дам ссылку на блокнот , чтобы эти графики можно было воспроизвести.

Если вам интересно, у меня также есть курс Dask по DataCamp , где я более подробно рассказываю о Dask с помощью интерактивных видео и упражнений. Первая глава этого курса бесплатна, занимает около 30 минут и охватывает все Dask, используемые ниже и в блокнотах.

Мы можем использовать Dask для выполнения вычислений с использованием потоков или процессов. Сначала мы импортируем Dask и используем dask.delayed для создания списка лениво оцененных результатов.

 import daskn = 10_000_000lazy_results= [] 
for i in range(16):
lazy_results.append(dask.delayed(basic_python_loop)(n))

Обратите внимание, что функция basic_python_loop фактически еще не запускалась это лениво оценивается. Вместо этого были сохранены только инструкции по его запуску.

Мы можем запустить вычисление с использованием многопоточности, например:

 results = dask.compute(lazy_results, scheduler='threads') 

Или можно запустить вычисление с использованием многопроцессорной обработки, например:

 results = dask.compute(lazy_results, scheduler='processes') 

Это самые простые методы, но в экспериментах для этой статьи я хотел больше контролировать количество используемых потоков и процессов. Для этого вы можете создать клиент, который настраивает пул процессов и/или потоков, которые вы используете для выполнения вычислений.

Например, чтобы создать и использовать пул из 3 процессов, вы можете использовать:

 process_client = Client( 
процессов=True,
n_workers=3,
threads_per_worker=1
)results = process_client.compute(lazy_results)

Меня очень вдохновил пост Брендана Фортюнера на Medium, опубликованный несколько лет назад. На самом деле многое из того, что я сделал здесь, воссоздает его примеры, но я хотел пойти немного глубже, чем то, что было в оригинальной статье, которую он написал.

Введение в потоки и процессы в Python

Руководство для начинающих по параллельному программированию

medium.com

Если вы часто используете нативные циклы Python в своем коде, вам определенно следует использовать Numba. Это может ускорить эти циклы до скоростей, приближающихся к скорости C. Лучше всего, если вы правильно используете Numba (см. блокнот), вы можете настроить его так, чтобы ваши функции цикла не блокировали GIL. Это означает, что вы можете использовать функции циклов Numba, которые уже работают намного быстрее, и запускать их параллельно с многопоточностью.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *