Comments 10
Применение bogosort здесь не очень удачное, так как в случае параллельного выполнения результат получается случайным по отношению к количеству операций. Раз так «быстро» предлагается сортировать, то лучше что-ли через next_permutation делать, сложность получится та же, O(n!) для n различных значений, но результат уже будет более предсказуемым .
Только работал с этой библиотекой и тут же статья - прикольно).
Заметил одну проблему, связанную со многопроцессорностью и многопоточностью: все это плохо работает с random и np.random, когда нужно контролировать состояние рандома - результаты будут отличаться от последовательного исполнения, учтите этот момент.
Например, если вы попробуете реализовать бутстрап вручную и распараллелить его выполнение, то состояние рандома на каждом ядре будет сбрасываться в начальную точку, а не продолжаться как при последовательном выполнении и лучше в этом случае сделать обычный генератор.
Ну а вообще, библиотека очень полезная и не зря используется под капотом в sklearn. Хорошо, что появляются статьи про подобные либы на русском языке.
Спасибо за статью!
Довольно полезный и наглядный пример с расчетом кластеров в KMeans, но хотелось бы побольше примеров различного использования.
Доброго дня.
Я использовал вызов в jupytor notebook субпроцесс python файла, с передачей в него аргументов, и уже в нем многопроцессорной обработкой; результат возвращал в ноутбук через stdout.
Более громозко, чем у Вас.
Добрый день!
Интересно было бы посмотреть ваш вариант и сравнит его с моим.
Спасибо за интерес к посту!
# jupyter notebook
result = !python executable/parser.py {path_zip_file} # type: ignore
result = pd.read_json(result[0])
result.info()
# python script
def main():
path_to_file = Path(argv[1])
page_list = _open_zip_file(path_to_file)
result = run_parser(_worker, page_list)
stdout.write(result.to_json())
if __name__ == '__main__':
main()
Я немного соврал, оказывается я сохранял файл, а потом просто вызывал скрипт и передавал в него адрес к файлу.
По факту я использовал Pool из библиотеки multiprocessing
Кстати, нашел еще один вариант у себя, использования многопоточности в jupyter notebook.
from multiprocessing.dummy import Pool as ThreadPool
with ThreadPool(30) as pool:
workreturn = pool.map(_worker, l_b)
Я вообще искал как запустить асинхронность в jupyter, но так и не нашел способа.
Нашел этот вариант, он не сильно проигрывал асинхронному варианту на python. Возможно дело в api к которому я подрубался. В итоге не стал парится оставил такой вариант.
Не могу говорить по поводу скорости в первом варианте, все таки запись и чтение много времени съедает.
НО есть вариант, только я не тестил, так что смотри сам.
В библиотеки pandas есть методы, `read_clipboard()` и `to_clipboard()`, Эти методы позволяют читать и записывать в буфер обмена таблицы данных.
Я на постоянной основе использую его для перекидки таблиц из офиса туда и обратно, бери на заметку.
Оптимизации работы Jupyter notebook при помощи параллельных вычислений (Библиотека Joblib)