SlideShare a Scribd company logo
Многопоточность в языке R
Пакет future
Алексей Селезнёв
Предыдущие уроки
•циклы for, while и repeat
•функции семейства apply
•пакет purrr
•основы многопоточности в R
•многопоточность с помощью пакета future
Явное и неявное объявление фьючерсов
Неявное объявление:
v %<-% { expr }
Явное объявление:
f <- future({ expr })
v <- value(f)
Аргументы в функции future
• expr – выражение, которые будет вычислено;
• envir – окружение, из которого необходимо экспортировать глобальные объекты;
• lazy – управляет ленивым вычисленим, т.е. вы можете указать TRUE, в таком случае
фьючерс начнёт вычисляться, только когда в коде будет прямое оразение к его значению,
по умолчанию FALSE;
• seed – позволяет установить во всех параллельных потоках стартовое значение генератора
случайных чисел;
• packages– позволяет указать, какие пакеты необходимо подключить для выполнения
вычислений фьючерса;
Стратегии выполнения кода в future
Последовательное выполнение:
Название схемы Поддержка операционных систем Описание
sequential все Выполняется последовательно и в текущем процессе R
Параллельное выполнение:
Название схемы Поддержка операционных систем Описание
multisession все
Выполняется параллельно в фоновых сеансах R (на
текущей машине), основной сеанс R не блокируется
multicore
Не поддерживается на Windows и в
RStudio
Разветвленные процессы R (на текущей машине)
cluster все
Внешние сеансы R на текущих, локальных и / или
удаленных машинах, аналогично тому, как это
реализовано в пакете parallel
remote все Доступ к удаленным сеансам R
Вложенная схема реализации многопоточности
Опции future
• future.plan – установка дефолтной схемы вычислений;
• future.globals.maxSize – ограничение максимального объёма экспортируемых из
глобального окружения объектов;
• future.globals.onReference – позволяет управлять поведением future при экспорте
ссылочных объектов, которые нельзя экспортировать, например объектов соединения с
базами данных;
• future.wait.timeout – максимальное время ожидания свободного узла;
• future.wait.interval – начальный интервал паузы, между опросами статуса узлов, в поисках
свободного;
• future.wait.alpha – повышающий коэффициент интервала между опросами узлов.
Переменные среды future
Опция Переменная среды
future.globals.maxSize R_FUTURE_GLOBALS_MAXSIZE
future.plan R_FUTURE_PLAN
future.globals.onReference R_FUTURE_GLOBALS_ONREFERENCE
future.wait.timeout R_FUTURE_WAIT_TIMEOUT
… R_...
Другие пакеты входящие в futureverse
• future – основной пакет futureverse.
• future.apply – параллельная реализация семейства apply;
• furrr – параллельная реализация purrr;
• doFuture – бекенд для foreach;
• progressr – позволяет использовать прогрессбары при параллельных вычислениях;
и другие: future.batchtools, future.callr, future.tests, parallelly, …
СПАСИБО ЗА ВНИМАНИЕ

More Related Content

What's hot

Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonMaxim Kulsha
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноVladislav Bezverhiy
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Minsk Linux User Group
 
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Alexandr Nox
 
Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bashkuchinskaya
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...Iosif Itkin
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package managercorehard_by
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...Ontico
 
Seminar6 configuring amp-amp_testing_yournetwork
Seminar6 configuring amp-amp_testing_yournetworkSeminar6 configuring amp-amp_testing_yournetwork
Seminar6 configuring amp-amp_testing_yournetworkGrigoriy Khazankin
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Roman Tsisyk
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Ontico
 
ES6. Генераторы
ES6. ГенераторыES6. Генераторы
ES6. Генераторыoelifantiev
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?tfmailru
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Badoo Development
 
Александр Поштарук "Use-case оператора replyWhen из Rx.JS на примере Ангулар ...
Александр Поштарук "Use-case оператора replyWhen из Rx.JS на примере Ангулар ...Александр Поштарук "Use-case оператора replyWhen из Rx.JS на примере Ангулар ...
Александр Поштарук "Use-case оператора replyWhen из Rx.JS на примере Ангулар ...Fwdays
 
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep «Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep e-Legion
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerAnton Arhipov
 

What's hot (20)

Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" Python
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех
 
Ngs 1 2
Ngs 1 2Ngs 1 2
Ngs 1 2
 
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.
 
Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bash
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
 
Seminar6 configuring amp-amp_testing_yournetwork
Seminar6 configuring amp-amp_testing_yournetworkSeminar6 configuring amp-amp_testing_yournetwork
Seminar6 configuring amp-amp_testing_yournetwork
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
 
ES6. Генераторы
ES6. ГенераторыES6. Генераторы
ES6. Генераторы
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 
Александр Поштарук "Use-case оператора replyWhen из Rx.JS на примере Ангулар ...
Александр Поштарук "Use-case оператора replyWhen из Rx.JS на примере Ангулар ...Александр Поштарук "Use-case оператора replyWhen из Rx.JS на примере Ангулар ...
Александр Поштарук "Use-case оператора replyWhen из Rx.JS на примере Ангулар ...
 
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep «Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
 

Similar to Пакет future

Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptSmartTools
 
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...WebCamp
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QASQALab
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Ontico
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Иван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программированиеИван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программированиеYandex
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиAndrey Markelov
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14Serguei Gitinsky
 
Rapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsRapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsAndrei Nikolaenko
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelMikhail Kurnosov
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейCisco Russia
 
Функциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridФункциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridАрсений Жижелев
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действииNikita Lipsky
 

Similar to Пакет future (20)

Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
 
09 - Hadoop. Pig
09 - Hadoop. Pig09 - Hadoop. Pig
09 - Hadoop. Pig
 
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Иван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программированиеИван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программирование
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
 
Rapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsRapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development Environments
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
 
Функциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridФункциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGrid
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 

More from Алексей Селезнёв

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Алексей Селезнёв
 
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...Алексей Селезнёв
 

More from Алексей Селезнёв (20)

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
 
14. мета пакет.pdf
14. мета пакет.pdf14. мета пакет.pdf
14. мета пакет.pdf
 
gargle.pdf
gargle.pdfgargle.pdf
gargle.pdf
 
12.wrapping-apis.pdf
12.wrapping-apis.pdf12.wrapping-apis.pdf
12.wrapping-apis.pdf
 
10.release_on_cran.pdf
10.release_on_cran.pdf10.release_on_cran.pdf
10.release_on_cran.pdf
 
10.website.pdf
10.website.pdf10.website.pdf
10.website.pdf
 
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
9-vignetts.pdf
 
function_docs.pdf
function_docs.pdffunction_docs.pdf
function_docs.pdf
 
07-testing.pdf
07-testing.pdf07-testing.pdf
07-testing.pdf
 
6.dependecies.pdf
6.dependecies.pdf6.dependecies.pdf
6.dependecies.pdf
 
DESCRIPTION.pdf
DESCRIPTION.pdfDESCRIPTION.pdf
DESCRIPTION.pdf
 
Add data to r package
Add data to r packageAdd data to r package
Add data to r package
 
3-r-code.pdf
3-r-code.pdf3-r-code.pdf
3-r-code.pdf
 
integration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdfintegration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdf
 
create_package_1.pdf
create_package_1.pdfcreate_package_1.pdf
create_package_1.pdf
 
Бекенды dplyr
Бекенды dplyrБекенды dplyr
Бекенды dplyr
 
Пакет purrr
Пакет purrrПакет purrr
Пакет purrr
 
Функции семейства apply
Функции семейства applyФункции семейства apply
Функции семейства apply
 
Циклы в R
Циклы в RЦиклы в R
Циклы в R
 
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
 

Пакет future

  • 1. Многопоточность в языке R Пакет future Алексей Селезнёв
  • 2. Предыдущие уроки •циклы for, while и repeat •функции семейства apply •пакет purrr •основы многопоточности в R •многопоточность с помощью пакета future
  • 3. Явное и неявное объявление фьючерсов Неявное объявление: v %<-% { expr } Явное объявление: f <- future({ expr }) v <- value(f)
  • 4. Аргументы в функции future • expr – выражение, которые будет вычислено; • envir – окружение, из которого необходимо экспортировать глобальные объекты; • lazy – управляет ленивым вычисленим, т.е. вы можете указать TRUE, в таком случае фьючерс начнёт вычисляться, только когда в коде будет прямое оразение к его значению, по умолчанию FALSE; • seed – позволяет установить во всех параллельных потоках стартовое значение генератора случайных чисел; • packages– позволяет указать, какие пакеты необходимо подключить для выполнения вычислений фьючерса;
  • 5. Стратегии выполнения кода в future Последовательное выполнение: Название схемы Поддержка операционных систем Описание sequential все Выполняется последовательно и в текущем процессе R Параллельное выполнение: Название схемы Поддержка операционных систем Описание multisession все Выполняется параллельно в фоновых сеансах R (на текущей машине), основной сеанс R не блокируется multicore Не поддерживается на Windows и в RStudio Разветвленные процессы R (на текущей машине) cluster все Внешние сеансы R на текущих, локальных и / или удаленных машинах, аналогично тому, как это реализовано в пакете parallel remote все Доступ к удаленным сеансам R
  • 6. Вложенная схема реализации многопоточности
  • 7. Опции future • future.plan – установка дефолтной схемы вычислений; • future.globals.maxSize – ограничение максимального объёма экспортируемых из глобального окружения объектов; • future.globals.onReference – позволяет управлять поведением future при экспорте ссылочных объектов, которые нельзя экспортировать, например объектов соединения с базами данных; • future.wait.timeout – максимальное время ожидания свободного узла; • future.wait.interval – начальный интервал паузы, между опросами статуса узлов, в поисках свободного; • future.wait.alpha – повышающий коэффициент интервала между опросами узлов.
  • 8. Переменные среды future Опция Переменная среды future.globals.maxSize R_FUTURE_GLOBALS_MAXSIZE future.plan R_FUTURE_PLAN future.globals.onReference R_FUTURE_GLOBALS_ONREFERENCE future.wait.timeout R_FUTURE_WAIT_TIMEOUT … R_...
  • 9. Другие пакеты входящие в futureverse • future – основной пакет futureverse. • future.apply – параллельная реализация семейства apply; • furrr – параллельная реализация purrr; • doFuture – бекенд для foreach; • progressr – позволяет использовать прогрессбары при параллельных вычислениях; и другие: future.batchtools, future.callr, future.tests, parallelly, …