Многопоточность регрессий в Python - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть проект в Python, который требует регрессии многих переменных против многих других. Я использую блокнот Jupyter для ясности, но также хочу использовать другую IDE, если это проще. Мой код выглядит примерно так:

for a in dependent_variables:
    for b in independent_variables:
        regress a on b

Мой текущий набор данных не очень большой, поэтому все это занимает, может быть, 30 секунд, но скоро у меня будет гораздо больший набор данных, который значительно увеличит требуемое время. Мне любопытно, подходит ли эта ситуация для распараллеливания. В частности, если у меня есть двухпоточный восьмиъядерный процессор (то есть всего 16 процессоров), можно ли запускать одновременные процессы, где каждый процесс сравнивает одну из первых переменных с одной из вторых переменных, что позволяет мне завершить, скажем, восемь из этих регрессий одновременно (если я выделю половину процессоров для этого процесса)? Я не очень знаком с распараллеливанием, и большинство других ответов, которые я нашел, обсуждали распараллеливание одного вызова функции, а не одновременное выполнение нескольких похожих функций. Я ценю помощь!

1 Ответ

0 голосов
/ 13 апреля 2020

Номинально, это

import itertools
import multiprocessing as mp

def regress_me(vars):
    ind_var, dep_var = vars
    # your regression may be better than mine...
    result = "{} {}".format(ind_var, dep_var)
    return result

if __name__ == "__main__":
    with mp.Pool(8) as pool:
        analyse_this = list(itertools.product(independent_variables,
            dependent_variables))
        result = mp.map(regress_me, analyse_this)

Многое зависит от того, что передается между родителем и ребенком, и используете ли вы систему разветвления, такую ​​как linux, или систему порождения, такую ​​как windows. Если эти наборы данных извлекаются с диска, лучше выполнить чтение в рабочем файле regress_me, а не передавать его от родителя. Вы можете прочитать об этом с помощью стандартной библиотеки python multiprocessing.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...