Вопросы с тегами [parallel-processing]

6

голосов
0

ответ
104

Просмотры

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

У меня есть алгоритм параллельной сортировки списка заданной длины: импорт Control.Parallel (пар, pseq) импорт Data.Time.Clock (diffUTCTime, GetCurrentTime) импорт System.Environment (getArgs) импорт System.Random (StdGen, getStdGen, Randoms) parSort :: (Ord а) => [а] -> [а] parSort (х: хз) = сила больше `par` (заставить меньшую` pseq` (менее ++ х: больше)), где меньшие = parSort [у | у [а] -> [а] сортировки (х: хз) = меньшее ++ х: больше, где меньше, = рода [у | у (сила) хз = хз идут `pseq` (), где идут (_: хз) = идти хз идти [] = 1 randomInts :: Int -> StdGen -> [Int] randomInts кг = позволяют Result = принять к (Randoms г) в результате силы `seq` результат функции теста = parSort основных = делать арг
Vasiliy
1

голосов
1

ответ
62

Просмотры

Пожалуйста, помогите понять Haskell Parallel

Я читал некоторые документы, используя в качестве примера Фибоначчи. Тогда я начал пытаться parallelise мой код в основном работает со списком. Мой код не получил быстрее. Пример кода: parMap :: (а -> б) -> [а] -> [б] parMap е = withStrategy (parList rseq). Карта F parZipWith :: (а -> б -> с) -> [а] -> [Ь] -> [с] parZipWith е а = withStrategy (parList rseq). zipWith е в качестве основных = дайте рипы = parMap parseIPRange [] - огромный список предметов, как «192.168.3.1/24» результат = parZipWith checkSubnets рипы (хвост срывает ++ [IPRange 0 0]) результат печати Я думаю, что я должен иметь неправильно все это. PS: Все это является мигрирующим из https://github.com/magicloud/ip_helper, который Rust с районом.
Magicloud
1

голосов
0

ответ
76

Просмотры

R parallel rocessing with for loop in function

Я строй параллельного цикла обработки, который имеет цикл укрытый внутри. для простоты я только в том числе одну строку кода внутри функции и для цикла, но в действительности существует около 1000 строк кода. В этом небольшом примере, я строй сетку, для которой я хотел бы, чтобы перебрать все строки в AllDatasets закупорки в значениях столбца с именем «а», где я просто хочу, чтобы преобразовать их из списка в числовое число и возврат это значение. Когда я итерацию по строкам в AllDatasets Я хотел бы вернуть значение, что строки итерации. В настоящее время мой код возвращает 20 20 20 20 20 20. Я хотел бы мой код, чтобы вернуть вектор 20 21 22 23 24 25 По существу, Я хочу, чтобы моя функция передать значение столбца а к новой переменной (PredictValue) для того, чтобы использовать это значение для запуска некоторых дополнительных вычислений, прежде чем теперь переходит на следующий в AllDatasetsdataset. Спасибо за помощь! Вот мой код: библиотека (параллельный) библиотека (Еогеасп) библиотека (doParallel) start.time
CooperBuck
1

голосов
1

ответ
342

Просмотры

Auto Parallelization with VS

I am trying to understand how the auto-parallelization works to speed up the execution of a program I am writing. I have created a simpler example: #include #include #include using namespace std; using namespace std::chrono; class matrix { public: matrix(int size, double value) { A.resize(size, vector(size, value)); B.resize(size, vector(size, value)); }; void prodScal(double valore) { for (int m = 0; m < A.size(); m++) for (int n = 0; n < A.size(); n++) { B[m][n] = A[m][n] * valore; }; }; double elemento(int riga, int column) { return B[riga][column]; } protected: vector A, B; }; void main() { matrix* M; M = new matrix(1000, 174.9); high_resolution_clock::time_point t1 = high_resolution_clock::now(); #pragma loop(hint_parallel(4)) for (int i = 0; i < 1000; i++) M->prodScal(567.3); high_resolution_clock::time_point t2 = high_resolution_clock::now(); auto duration = duration_cast(t2 - t1).count(); cout
Mattia
1

голосов
1

ответ
39

Просмотры

Как иметь два вложенных Parfors итерация двух огромных массивов в Matlab?

Учитывая два массива A = Huge_Arrau_one и B = Huge_array_two, как я могу изменить следующий код для работы в Matlab (как Matlab не принимает вложенные циклы). parfor (I, J) в all_combinations_of_A_and_B_indices A_in_this_worker = А (I); B_in_this_worker = В (к); .... конец Пожалуйста, обратите внимание, что я не хочу, чтобы все массива A и B в памяти для каждого работника, поскольку каждый работник нуждается только небольшую часть этого. Эта проблема обсуждалась ранее для индексации два измерения в 2d массив (используя sub2ind и ind2sub функции), но как ни странно, я никогда не видел эту версию проблемы я в настоящее время борется с. На самом деле, я хочу иметь отдельный работник для каждой комбинации, и мне нужно, чтобы получить доступ к части А и В в каждом работнике.
CoderInNetwork
1

голосов
0

ответ
117

Просмотры

Обновление массива изображения пакетного на месте при использовании joblib

Это дополнительный вопрос для моего решения на следующий вопрос: Как применить функцию параллельно с несколькими изображениями в Numpy массива? Мое предложенное решение работает хорошо, если функция process_image () должен возвращать результат, а затем мы можем кэшировать, что в какой-то список для последующей обработки. Так как я хочу, чтобы сделать этот тип предварительной обработки для более 100K изображений (с формой массива (100000, 32, 32, 3)), я хочу, чтобы мое решение было очень эффективным. Но, мой список, основанный подход боры на много памяти и, таким образом, он также будет неэффективным (для дальнейшей обработки). Итак, я хочу, чтобы массив, который будет обновляться в месте внутри функции process_image (), когда эта функция вызывается несколько раз с помощью joblib. Но, у меня проблемы с обновлением исходного массива дозируемых изображений на месте. Я попробовал предложение Эрик, но он не может обновить исходный массив на месте. Я проверил ли память массива действительно разделяется между рабочими процессами, печатая флаги массива внутри функции process_image. Вот мой код для этого: импорта NumPy в нп от skimage воздействия импорта из joblib импорта Параллели, задержанного # количество процессов nprocs = 10 # порционных массив изображений img_arr = np.random.randint (0, 255, (1000, 32, . 32, 3)) astype (np.float32) # для проверки img_arr_copy = img_arr.copy () # функции, которые должны применяться на всех изображениях (параллельно) # примечание: эта функция не может обновить исходный массив на месте, но # Я хочу на месте Updation из исходного массива с результатом `equalize_hist` Защита process_image (IMG, IDX):«»» обновить исходный массив на месте, так как все рабочие процессы разделяют оригинальную память! то есть они не делают копию при обработке его. "" "Печать ( "\ п обработки изображений:", IDX) IMG [...] = exposure.equalize_hist (IMG) печать ( "метаданные массива: \ п", img.flags) печать (" ===== ================== \ п ") # запустить` process_image () `параллельно параллельно (n_jobs = nprocs) (задержка (process_image) (img_arr [IDX], IDX) для IDX в диапазоне (img_arr.shape [0])) Я даже попытался инициализировать пустой массив, используя np.empty () в том же форме, как исходный массив изображений и дозируемых попытался обновить его, но это также не удались. Я не знаю, где это происходит не так, для проверки того, произошло Updation в массив или нет, я использовал:. np.all (result_arr == img_arr) где result_arr был инициализирован, как: result_arr = пр. пустой (img_arr.shape, DTYPE = np.float32) Где я буду неправильно и что это ошибка в моем коде? Все предложения будут высоко оценены !! Печать статистика из выше коды проверить, разделяет ли память или нет: обработки изображений: 914 метаданных массива: C_CONTIGUOUS: True F_CONTIGUOUS: Ложные OWNDATA: FALSE #
kmario23
1

голосов
2

ответ
180

Просмотры

Распределенная Запирание

У меня есть 3 процесса (P1, P2 и P3) каждое из которых работает на разных машинах. Эти доли процесса 3 таблицы (T1, T2 и T3) в базе данных. При обновлении этих таблиц мне нужно поддерживать атомарность 3 таблицы сразу (либо все таблицы должны быть изменены или ни одна из таблиц не должны быть изменены). Моя база данных не обеспечивает блокировку для обновления нескольких таблиц одновременно. Как эта операция выполняется эффективно? Что является часто используемым решением этой проблемы. Я могу создать отдельную таблицу в базе данных, чтобы выступать в качестве мьютекса. Запись 1, когда любой процесс запущен, и 0, когда процесс завершается. Но даже с этим решением, когда процесс 1 только освобождает семафор, процесс 2 и 3 процесса могут одновременно войти в критическую секцию. Я могу использовать чек двойной блокировки, чтобы решить эту проблему. Есть ли простое решение этой проблемы? Есть ли уже существующие API в любой библиотеке?
Kishor Bhandari
1

голосов
1

ответ
339

Просмотры

NullPointerException when switch from stream to parallelStream

Помогите мне понять это; У меня есть логика потока на основе, который группирует объекты в карте-из-списков на основе какой-то ключевой строки, которая строится из его полей. Используя поток это работает без каких-либо ошибок: Карта mapOfkeyToListOfEntities = baseJournalEntries .stream () .collect (Collectors.groupingBy (eneity -> buildKey (юридическое лицо))); Но если я пытаюсь сделать это параллельно путем изменения методы пары () в parallelStream () как так: Карта mapOfkeyToListOfEntities = baseJournalEntries .parallelStream () .collect (Collectors.groupingBy (юридическое лицо -> buildKey (лица))); Я получаю исключение: Вызванный: java.lang.NullPointerException на sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method) в sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) в sun.reflect.DelegatingConstructorAccessorImpl. все субъекты способны генерировать ключ, так что не может быть NPE в buildKey ... Я не понимаю. Где нужно искать?
tbeernot
1

голосов
0

ответ
88

Просмотры

Julia using Slurm invokes only one node

srun --nodes = 3 имя хоста успешно возвращает все имена 3 узла, но srun --nodes = 3 джулия test.jl с ошибкой ниже, где test.jl дается в конце здесь Worker 2 прекращается. ERROR (необработанное сбой задачи): Версия для чтения не удалось. Соединение закрыто пэром. StackTrace: [1] process_hdr (:: TcpSocket, :: Bool) при ./distributed/process_messages.jl:257 [2] message_handler_loop (:: TcpSocket, :: TcpSocket, :: Bool) в ./distributed/process_messages.jl : 143 [3] process_tcp_streams (:: TcpSocket, :: TcpSocket, :: Bool) при ./distributed/process_messages.jl:118 [4] (:: Base.Distributed ## 99 # 100 {TcpSocket, TcpSocket, BOOL. }) () в ./event.jl:73 srun: ошибке: н-0-2: задача 2: возбужденная с выходными код 1 srun: ошибка: н-0-0: задача 0: возбужденный с кодом выхода 1 srun: ошибка: н-0-2: задача 2: возбужденная с кодом выхода 1 srun: ошибка: н-0-1: задача 1: возбужденная с кодом выхода 1 тестом. JL использованием ClusterManagers addprocs (SlurmManager (3), раздел = "Слерма", т = "00: 5: 00)" хостов = [] PIDS = [] для ввода в рабочих () хоста, PID = выборки (@spawnat я ( gethostname (), GETPID ())) Println (хост) нажать! (хосты, хост) нажать! (ИДП, PID) конец # распределение ресурсов Слермы отпускается, когда все работники имеют # выходили за I в рабочих () rmprocs ( я) конец Почему? Примечание: Я не Юлю в качестве модуля, но джулия находится в общей папке, доступной всем узлам. ИДП) конец # Распределение ресурсов Слермы освобождаются, когда все работники имеют # выходили за I в рабочих () rmprocs (I) конце Почему? Примечание: Я не Юлю в качестве модуля, но джулия находится в общей папке, доступной всем узлам. ИДП) конец # Распределение ресурсов Слермы освобождаются, когда все работники имеют # выходили за I в рабочих () rmprocs (I) конце Почему? Примечание: Я не Юлю в качестве модуля, но джулия находится в общей папке, доступной всем узлам.
Tims
1

голосов
2

ответ
104

Просмотры

Как распараллелить алгоритм negamax?

Есть ли способ распараллеливания следующего negamax алгоритма? 01 Функция negamax (узел, глубина, цвет), если глубина 02 = 0 или узел является конечным узлом 03 возврата цвета * эвристическое значение узла 04 bestValue: 05 = -∞ Еогеаспа дочернего узла 06 V: = -negamax (ребенок, глубина - 1, -Колор) 07 bestValue: = макс (bestValue, v) 08 возвращение bestValue
Pietro Gerace
1

голосов
1

ответ
53

Просмотры

Можно ли обрабатывать для цикла параллельно внутри одной и той же хранимой процедуры?

Имейте процедуру SQL Server хранится где я хочу перебрать набор опций, которые я прочитал из таблицы. Так сказать, таблица имеет 100 вариантов. Мой цикл хранится процедура будет через эти параметры и для каждого варианта мне нужно сделать некоторые проверки - путем опроса несколько конкретных таблиц, основанных на опции и пометить статус, связанный с ним. Можно ли мне расколоть цикл таким образом, что строка 1 -50 обрабатываются в одном цикле и ряд 51-100 в другом цикле, и я могу запустить обе эти параллельно ?. Я вижу путь, где вы можете запустить несколько хранимой процедуру параллельно через работу SQL или другие средства, но не в состоянии увидеть, если я могу получить цикл для выполнения параллельно, разделив ее.
Rahul J
1

голосов
1

ответ
60

Просмотры

Как работает политика выполнения для последовательных алгоритмов обхода в C ++?

C ++ 17 добавлена ​​политика выполнения для многих алгоритмов. Для алгоритмов, таких как for_each легко представить себе, как реализация распараллеливаемого будет работать: вместо того, чтобы вызывать прилагаемую функцию последовательно от первого до последнего, разбивает диапазон и выполнить функцию параллельно для каждого раздела. Но для алгоритмов, которые предполагают последовательный обход с первым появлением, как найти, что бы распараллеливаемые делать?
Mircea Baja
1

голосов
1

ответ
119

Просмотры

цикл OpenMP, где каждая итерация зависит от предыдущего

Таким образом, у меня есть небольшая петля, что я пытаюсь распараллеливания с помощью OpenMP. Проблема я столкнулся в том, что каждая итерация зависит от результата от предыдущего. Посмотрите на мой код ниже: для (INT = 1; г <N; я ++) {для (Int J = 0, J <М; j ++) {А [I] [J] = A [I-1] [Дж ]; если (х [г]
Ching Ling
1

голосов
0

ответ
177

Просмотры

R + снег + Кластер: Убить раб, когда мастер умирает

Я распараллеливания мой R-код с помощью снеговых кластеров (типа СОК) на Ubuntu 16 LTS. Более простой пример кода ниже: # Make кластер носка кл типа
Sergio Gómez
1

голосов
1

ответ
134

Просмотры

How to test an instance counter by asynchronous run of a boost childprocess?

Я пытался использовать повышение :: childprocess с async_pipe, как показано в примере кода, в то время как ожидали, так как есть метод ждать, что вызов для запуска не будет ждать, пока вызываемый исполняемый файл, чтобы закончить перед продолжением линии, где я ожидание вызова (). Моя цель состоит в том, чтобы начать именно те же исполняемые несколько раз, чтобы проверить в GTEST метод экземпляра подсчета (реализовано на основе повышающего управляемый разделяемого сегмента памяти). Но вот носовой мне нужен вызов io_service :: Run (), чтобы не ждать, пока вызываемый исполняемый файл, чтобы закончить, как это делает сейчас. Может кто-нибудь сказать мне, где я использую это неправильно, пожалуйста? Или, если это неправильный путь к блоку проверить свою функцию? Я пытался найти решение в течение достаточно долгого времени! Вот пример того, как я называю один экземпляр исполняемого файла: INT CallChildProcess_Style9 () {станд :: строка strCmdLine = «E: m_oAsyncPipe_Out.close (); m_oIOS.reset (); возвращать результат; }
Chrysmac
1

голосов
0

ответ
49

Просмотры

Использование фильтра Гаусса в C ++ AMP возвращаются неправильные цвета

Я пытаюсь использовать гауссовский фильтр на заданном множестве Мандельброта, и у меня есть решение, которое будет работать последовательно. Тем не менее, я хочу иметь решение, которое работает с использованием обработки GPU. Я использую C ++ AMP использовать обработку GPU. Проблема с хранением отдельных цветовых каналов пикселей, что в AMP вы не можете использовать неподписанные 8-битные целые числа (uint8_t), поэтому я должен был хранить каналы в беззнаковых 32-битных целых чисел (uint32_t). Весь синтаксис, что я реализованный в код AMP является таким же, как последовательными один, однако цвет, генерируемым в AMP имеет выход неправильных цветов, однако форму Мандельброта все еще можно увидеть. Таким образом, я считаю его так, что я вспоминая каналы вместе для пикселя, который дает неправильный цвет. Если больше нужны детали, Я могу предоставить их. Последовательный выход Последовательный код: аннулируются applyFilter () {Int kernelCentreX, kernelCentreY // центр индекс ядра междунар kernelRadius = 5/2; uint8_t г, г, б; плавать kernelTotal = 0.0; плавать redTotal = 0,0, blueTotal = 0.0, greenTotal = 0.0; поплавок суммы; the_clock :: time_point начать = the_clock :: сейчас (); для (INT у = 0; у <ВЫСОТА; у ++) {// цикл по высоте изображения для (Int х = 0; х <ШИРИНА; х ++) {// цикл по ширине изображения флоат redTotal = 0,0, blueTotal = 0,0, greenTotal = 0,0; плавать kernelTotal = 0.0; для (целое v = 0; v <5; v ++) {// цикл по высоте для ядра для (INT = 0; и <5; U ++) {// цикл по ширине для ядра // текущей позиции Int Сх = х + и - kernelRadius; INT сУ = у + v - kernelRadius; // Убедитесь, что мы остаемся в boundries если (Cx <0 || оГо> WIDTH - 1 || сУ <0 || сУ> ВЫСОТА - 1) {продолжить; } // Получение цветовых каналов текущего пикселя г = (изображения [сУ] [сЙ] >> 16); г = (изображение [сУ] [сЙ] >> 8); б = (изображение [сУ] [сЙ]); // Получение цветовых каналов текущего пикселя / * г = изображения [сУ] [сХ] >> 16; г = изображение [сУ] [сЙ] >> 8; б = изображение [сУ] [сЙ]; * / // Вычислить Итоговые redTotal + = г * Ядро [v] [и]; greenTotal + = г * Ядро [v] [и]; blueTotal + = б * Ядро [v] [и]; kernelTotal + = ядро ​​[v] [и]; }} // Вычислить новые значения пикселов г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); Изображение [у] [х] = (г 8, б = т [сУ] [сХ]; // Вычислить Итоговые redTotal + = г * к [V] [и]; greenTotal + = г * к [v] [и ]; blueTotal + = Ь * к [V] [и]; kernelTotal + = к [V] [и];}} // Вычислить новый пиксельные значения г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г kernelTotal + = ядро ​​[v] [и]; }} // Вычислить новые значения пикселов г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); Изображение [у] [х] = (г 8, б = т [сУ] [сХ]; // Вычислить Итоговые redTotal + = г * к [V] [и]; greenTotal + = г * к [v] [и ]; blueTotal + = Ь * к [V] [и]; kernelTotal + = к [V] [и];}} // Вычислить новый пиксельные значения г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г kernelTotal + = ядро ​​[v] [и]; }} // Вычислить новые значения пикселов г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); Изображение [у] [х] = (г 8, б = т [сУ] [сХ]; // Вычислить Итоговые redTotal + = г * к [V] [и]; greenTotal + = г * к [v] [и ]; blueTotal + = Ь * к [V] [и]; kernelTotal + = к [V] [и];}} // Вычислить новый пиксельные значения г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г }} // Вычислить новые значения пикселов г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); Изображение [у] [х] = (г 8, б = т [сУ] [сХ]; // Вычислить Итоговые redTotal + = г * к [V] [и]; greenTotal + = г * к [v] [и ]; blueTotal + = Ь * к [V] [и]; kernelTotal + = к [V] [и];}} // Вычислить новый пиксельные значения г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г }} // Вычислить новые значения пикселов г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); Изображение [у] [х] = (г 8, б = т [сУ] [сХ]; // Вычислить Итоговые redTotal + = г * к [V] [и]; greenTotal + = г * к [v] [и ]; blueTotal + = Ь * к [V] [и]; kernelTotal + = к [V] [и];}} // Вычислить новый пиксельные значения г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г б = (blueTotal / kernelTotal); Изображение [у] [х] = (г 8, б = т [сУ] [сХ]; // Вычислить Итоговые redTotal + = г * к [V] [и]; greenTotal + = г * к [v] [и ]; blueTotal + = Ь * к [V] [и]; kernelTotal + = к [V] [и];}} // Вычислить новый пиксельные значения г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г б = (blueTotal / kernelTotal); Изображение [у] [х] = (г 8, б = т [сУ] [сХ]; // Вычислить Итоговые redTotal + = г * к [V] [и]; greenTotal + = г * к [v] [и ]; blueTotal + = Ь * к [V] [и]; kernelTotal + = к [V] [и];}} // Вычислить новый пиксельные значения г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г }} // Вычислить новые значения пикселов г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г }} // Вычислить новые значения пикселов г = (redTotal / kernelTotal); г = (greenTotal / kernelTotal); б = (blueTotal / kernelTotal); ц [у] [х] = (г
Liam_Foth
1

голосов
1

ответ
49

Просмотры

GNU Parallel - Как захватить вывод в файлы с именами, используя входной аргумент

кот / TMP / вход> user1 tag1> user2 tag2> user3 tag3 Запуск параллельной команды как: параллельно -j2 --colsep '\ т' -a "/ TMP / вход" питон script.py> / вар / выход / log_ $ 1 _ $ 2.txt Я хочу, чтобы соответствующий выход будет в файлах с именами: - log_user1_tag1.txt - log_user2_tag2.txt
RJ.
1

голосов
0

ответ
190

Просмотры

Запуск карты () параллельно на нескольких ядрах?

Учитывая dataframe с 2 колонками списков JSON как это: col1 «[34454,31843,33239,34885,34352,42294,26603,55449,34710,49235,37558,82942,38028,58170,42772,27700,28464, 28917,31902,41082,37089,67366,48616,46706,31464,30308,33832,30485,50838,38225,59758,47311,33747,32972,34903,32729,52274,38895,45899,32511,31189,33756, 32684,47994,38019,31623,31751,32144,32398,44909,36542,160950,59383,53569,39797,36029,15031,15031,113913,33540,106166,62518,36407,44354,36237,47610]». ... col2 «[14,7,5,3,4,0,1,7,2,3,1,18,13,4,23,7,8,8,11,18,15,6, 2,10,2,4,8,5,11,5,1,5,2,4,3,1,6,8,5,5,3,1,1,4,5,2,9, 3,4,11,11,14,3,12,2,6,0,0,15,1,18,5,3,6,6,6]»Я дал пример одной строки, но на самом деле я есть миллионы строк с col1 и col2. Я хочу, чтобы применить следующую формулу: col1 / number1 / col2 / number2 где number1 и number2 просто цифры, как 1,3,4 ... Вот что я сделал до сих пор, и мне нужна ваша помощь, чтобы сделать это быстрее, используя параллельные вычисления с несколькими ядрами, как параллельно :: parSapply. Карта ( `/`, lapply (ДФ $ col1, функция (я) {fromJSON (я) / number1}), lapply (ДФ $ col2, функция (я) {fromJSON (я) / number2})) Пожалуйста, посоветуйте, как запустить карту или любой аналог, но параллельно с использованием моих ядер.
SteveS
1

голосов
0

ответ
40

Просмотры

Я бег 1000 параллельного моделирования в R на кластере. Что является лучшим способом для управления и рекомбинируют результаты после того, как?

Я в настоящее время моделирования, что мне нужно в цикле более 1000 раз, прежде чем усреднением результатов. В настоящее время я помещаю результаты в списке с 1000 заходов. Однако каждое такое моделирование занимает около 1 часа. В результате, я параллельное моделирование схемы кодирования посредством я могу отправить мое кодирование будет выполняться параллельно на кластере настройки. В настоящее время, похоже, у меня будет 1000 .rdata файлов, из которых я буду пытаться объединить позже. Я убедился, что переменные, представляющие интерес в каждом из файлов .rdata были пронумерованы уже, чтобы избежать двусмысленности. Мне было интересно, если кто знает более эффективный метод, чем это? Будет ли способ объединить все результаты эффективно без открытых 1000 .rdata файлов? Спасибо!
user321627
1

голосов
1

ответ
191

Просмотры

Условное моделирование (с Кригинга) в R с распараллеливания?

Я использую пакет GSTAT в R для создания последовательного гауссового моделирования. Мой компьютер имеет 4 ядра, и я попытался распараллелить функцию Krige (), используя параллельный пакет следующий сценарий предоставленный Гусман, чтобы ответить на этот вопрос, как добиться параллельного Кригинг в R, чтобы ускорить этот процесс ?. Полученные в результате моделирования, однако, отличаются от тех, используя только одно ядро ​​в то время (без распараллеливания). Это выглядит проблема геометрии, но я не могу узнать, как это исправить. Далее я обеспечу пример (используя 4 ядро) генерирует 2 моделирования. Вы увидите, что после выполнения кода, смоделированные карты, полученные из распараллеливания показывают некоторые артефакты (например, вертикальные линии), и отличаются от них, используя только одно ядро ​​в то время. Код должен библиотеки GSTAT, SP, растровые, параллельные и spatstat. Если какой-либо из библиотеки линий () не работает, запустить install.packages () первым. библиотека (GSTAT) библиотека (SP) библиотека (растр) библиотеки (параллельно) Библиотека (spatstat) # создать регулярную сетку пх = 100 # число столбцов пу = 100 # количество строк srgr
cribeiro72
1

голосов
0

ответ
296

Просмотры

Параллельное чтение файла в Python

Я пытался читать большой файл и запись в другой файл, в то же время, после обработки данных из входного файла, файл довольно огромный около 4-8 Гб, есть способ parallelise процесса, чтобы сэкономить время оригинальная программа: с открытой (INFILE, "г"), как filein: с открытым (WriteFile, "ш"), как FileWrite: с открытой (файл ошибок, "ш"), как fileerror: линия = filein.readline () = кол 0 filewrite.write ( "Время, запрос, IP, MAC \ п"), тогда как линия: рассчитывать + = 1 строка = filein.readline () #print "{}: {}". формат (кол-, line.strip ()) содержание испытания, если requestp.search (линия): filewrite.write (line.strip () [15] + " ") filewrite.write (requestp.search (линия) .group () +","), Если IP.search (линия): filewrite.write (IP.search (линия) .group ()) filewrite.write ( ""), если MACp.search (линия): filewrite.write (MACp.search (линия) .group ()) filewrite.write ( «\ п») еще: fileerror.write (линия) Но это занимает слишком много времени, чтобы обработать такой файл и у меня есть 100 из таких файлов, я попытался с помощью Ipyparellel к parallilise код, но не увенчались успехом до сих пор, есть способ сделать это.fileerror.write (линия) Но это занимает слишком много времени, чтобы обработать такой файл и у меня есть 100 из таких файлов, я попытался с помощью Ipyparellel на parallilise кода, но не увенчался успехом до сих пор, есть способ сделать это ,fileerror.write (линия) Но это занимает слишком много времени, чтобы обработать такой файл и у меня есть 100 из таких файлов, я попытался с помощью Ipyparellel на parallilise кода, но не увенчался успехом до сих пор, есть способ сделать это ,
Harsh Sharma
1

голосов
0

ответ
108

Просмотры

Why java availableProcessors API keeps changing during the same run?

Я использую Runtime.getRuntime.availableProcessors (), чтобы создать свой пул потоков. На нашем собственном центре физических данных, он используется для возврата числа процессоров будучи 8, и он никогда не менялся. Тогда каждый раз, когда запрос (интенсивные данные) приходит, мы разбиваем данные, используя одни и те же availableProcessors API, и каждый поток этого пула потоков обрабатывает один из этих разделов. Однако, в последнее время мы переходим к AWS (и Докеру в контейнере), и каждый раз, когда запрос (интенсивные данные) приходит, и хотят разделить данные и так вызывает к этому API, возвращает другой номер. Пример: Num Перегородки Б: [Х = 12] [Y = 15] [Z = 12] [Вт = 5] [q = 15] [Р = 3] Это не хорошо. Что делать, если в то время, мы создаем пул потоков availableProcessors является 3 и когда приходит запрос, и мы разбиваем данные это 15. Я знаю, что документация API говорит: Возвращает количество доступных процессоров в виртуальной машине Java. Это значение может изменяться в течение конкретного вызова виртуальной машины. Приложения, которые чувствительны к количеству доступных процессоров должны поэтому иногда опрашивать это свойство и регулировать их использование ресурсов надлежащим образом. Но мои вопросы, почему она не используется для изменения ранее (всегда возвращается 8) и почему она меняется так резко на AWS, и если есть способ это исправить? Если нет никакого способа, чтобы исправить это, как я могу изменить приложение, чтобы убедиться, что пул потоков и перегородки совместимы? Спасибо Приложения, которые чувствительны к количеству доступных процессоров должны поэтому иногда опрашивать это свойство и регулировать их использование ресурсов надлежащим образом. Но мои вопросы, почему он не используется для изменения ранее (всегда возвращается 8) и поэтому он меняется так резко на AWS, если есть способ, чтобы исправить это? Если нет никакого способа, чтобы исправить это, как я могу изменить приложение, чтобы убедиться, что пул потоков и перегородки совместимы? Спасибо Приложения, которые чувствительны к количеству доступных процессоров должны поэтому иногда опрашивать это свойство и регулировать их использование ресурсов надлежащим образом. Но мои вопросы, почему она не используется для изменения ранее (всегда возвращается 8) и почему она меняется так резко на AWS, и если есть способ это исправить? Если нет никакого способа, чтобы исправить это, как я могу изменить приложение, чтобы убедиться, что пул потоков и перегородки совместимы? Спасибо
user1819676
1

голосов
0

ответ
68

Просмотры

Ускорить R Focal Функция

Я бегу Focal функцию в R расчета режима внутри моего движущегося окна. Это выполняется на большом растра с размером ячейки 56м (подробности см ниже). Размеры: RasterLayer: класс 63091, 52410, 3306599310 (nrow, Ncol, Ncell) Разрешение: 56, 56 (х, у) степени: -1575288, 1359672, -1486356, 2046740 (Xmin, Xmax, Ymin, уты) коорд. ссылка + Рго = AEA + lat_1 = 44,75 + 55,75 = lat_2 + lat_0 = 40 + lon_0 = -96 + x_0 = 0 + y_0 = 0 + = датум WGS84 + ед = т + no_defs + ellps = WGS84 + towgs84 = 0,0 , 0 источник данных: D: DATAPATH \ rasterFile.tif имена: int17_5001 значения: 0, 500 (мин, макс) Это прекрасно работало при использовании меньших размеров окна, как 29 или 15х смотрите ниже. Они завершены примерно через 48 часов. 29xFocal
jotamon
1

голосов
1

ответ
31

Просмотры

Конечная группа Тема параллельных пользователей, как 0

Окончательный Thread Group есть график нагрузки с «рассчитывать ожидаемые параллельные пользователи» заслуживающий доверия нагрузки предварительного графика При загрузке, Hold и Shutdown имеют значения 0 на графике показывают 0 параллельных пользователей, хотя кажется, что он должен отображать количество потоков, поскольку сервер получает пользователей запросов в то же самое время, но график отображения его как 0 пользователей параллельно. Разве это не действует одновременно работающих пользователей нагрузки? это просто ошибка в графике отображения?
user7294900
1

голосов
0

ответ
49

Просмотры

Параллельные задания в цикл замедления с каждой итерации

Контекст: Я пытаюсь моделировать долгосрочный ремонт поврежденных мостов путем проверки состояния мостов (поврежденные или неповрежденные) в нескольких точках в течение определенного периода времени. Для этого я написал функцию Python под названием repair_over_horizon, которая принимает (среди прочего) список поврежденных мостов и выводит список списков, каждый из которых содержит мосты еще поврежденные в определенном временном шаге. Например, если список ввода были: [100, 423, 667, 904, 221, 56, 495, 70, 109, 65] и я использовал repair_over_horizon с 3 временных шагов, я ожидал бы выход быть что-то вроде: [[ 100, 423, 667, 904, 221, 56, 495, 70, 109, 65], [100, 423, 904, 56, 70, 109, 65], [423, 904]]. Функция repair_over_horizon фактически занимает несколько списков ввода, или «карты», в то время, и вычисляет их ремонт параллельно. Распараллеливание осуществляется для каждого временного шага, как показано в приведенном ниже коде. Я также включены функции, вызываемые в repair_over_horizon, а именно - compute_repairs_at_timestep и ремонт - для справки. Проблема: В то время как функция работает, как ожидается, с точки зрения производства, на каждой итерации (т.е.) временной шаг, ремонт значительно больше занимает. Это увеличение времени становится очевидным, когда число карт в Timestep увеличивается - например, в одной ситуации, где у меня есть 50 карт за 10 и временный шаг временных шагов, первая итерация занимает ~ 6с, и последняя итерация занимает ~ 21s. Когда у меня есть 500 карт за 5 и временный шаг временных шагов, первая итерация занимает ~ 36s и пятая итерация занимает ~ 110S. Устранение неполадок: Я профилированный код (см результатов на 500 карт на временный шаг и 5 временных шаги ниже) и проверил использование памяти, но это не для меня очевидно из результатов, где я собираюсь неправильно в реализации. Вопрос: Что может быть причиной этого массивного замедления между итерациями и как количество карт увеличивается? Любые идеи о том, как исправить это были бы оценены. ОБНОВЛЕНИЕ: Для того, чтобы проверить, имеется ли проблема памяти, я вставил GC.Collect () в различных точках к концам функций. Тем не менее, я все еще нашел, что ремонт займет больше времени с каждой итерации, как указано в разделе выше проблемы. Частичные результаты профилирования: упорядоченные по: совокупное время ncalls tottime percall cumtime percall Имя файла: LINENO (функция) 2500 1,102 0,000 289,855 0,116 /Library/Python/2.7/site-packages/pp.py:380(submit) 2505 285,901 0,114 285,901 0,114 { cPickle.dumps} 2500 0.020 0.000 0.051 127,742 /Library/Python/2.7/site-packages/pp.py: внутренний '] [MSTAR] [NSTAR] [KSTAR] [lstar] bridge_array_new_assembled [MSTAR] [NSTAR] [KSTAR] [lstar] [:] = temp_dict [' новый '] [MSTAR] [NSTAR] [KSTAR] [lstar] иначе: пройти t_per_timestep.append (time.time () - начало) печать "Done с Timestep к =", к, "в", time.time () - старт, "секунд" # близко сервер job_server.destroy (), если тихий == Ложный: #print bridge_array_internal_assembled_rec печать «Отлично. Вы смоделировали стохастическое восстановление мостов и создали зависящее от времени карты повреждений. если сюжет == True: передача # возвращает два списка списков в виде единого словаря с возвращением { «внутреннего» два ключа (внутренний и новый): bridge_array_internal_assembled, «новый»: bridge_array_new_assembled, «» временных шагов:
Gitanjali
1

голосов
0

ответ
57

Просмотры

parallel processing of columns in python

I have a large csv file, around 12 gb, which has about 1200 columns. I pull each column, and do some processing, dummy the categorical variables, standardize the numeric ones and concatenate each processed column into a final dataframe. cols_list is a list containing all the column names in the csv. for column in cols_list: df_column = pd.read_csv('df_sample.csv', usecols = [column],delimiter = ',') df_column = df_column.replace(r'^\s*$', np.nan, regex=True) ######################################### DATA PROCESSING ##################################### print('*'*10 + "\nWorking on column: " + str(column)) print(datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')) # Check if CAT and number of unique categories
Shuvayan Das
1

голосов
1

ответ
141

Просмотры

Trigger один AWS Lambda после завершения п Запуск АМС Lambda

Есть ли способ, чтобы вызвать один AWS лямбду после успешного завершения п параллельного запущенной лямбды. Давайте называть: параллельная лямбда-L1 окончательной лямбда L2 Некоторой ранее работой триггера задачи п лямбда L1 все, работающей на основе группы триггеров. Предположим, что существует 5 L1s группы 1 и 7 L1s группы 2 Моя цель, чтобы вызвать L2, когда какой-либо из указанной выше группы завершает свое выполнение. Если все группы 1 лямбда успешно завершена, то оны одного триггера L2 для группы 1 и того же группа 2. Короче я ищу сгруппированный триггер для L2. Обратите внимание: Обе лямбды работают в VPC, и я использую SNS, чтобы соединить их вместе, и я не хочу использовать задачу мониторинга. Пожалуйста, обратите внимание сценарий, когда 3 из 5 лямбды уже сделано. 4 и 5 полных в то же самое время, которое из них будет инициировать L2. Важно: доступ в Интернет блокируется в VPC
Jugraj Singh
0

голосов
0

ответ
19

Просмотры

Why is C++ openmp CPU behavior different from Python joblib?

I have a code that I wrote in both Python and C++. For the Python version, I used joblib which creates parallel processes. For OpenMP, I used OpenMP. The code is a bit long and does heavy number crunching so I'll not write it here... But the code performs the following pseudo-code. It basically collects batches of N samples (each of size N) from an input X, then uses OpenMP in C++ (or joblib in python) to compute a function over the batch, i.e. by computing N functions in parallel. pseudo-code def function(X): X = input (an large number array) N = sample_size (i.e. 10 or 1024) for i in [0: len(X) : N] do # loop through input in batches input_buffer = [] for j in [0 : N : 1] do # collect N sized batch S = sample(X) # sample S is also of size N input_buffer.append(S) PARALLEL(function, input_buffer) # process N samples in parallel # using OpenMP in C++ / joblib in Python But when I ran the code in C++ using OpenMP and I get the following: N = 512, CPU usage: 99%, time = 1.87 seconds N = 1024, CPU usage: 99%, time = 4.03 seconds N = 2048, CPU usage: 75%, time = 12.03 seconds N = 4096, CPU usage: 53%, time = 24 seconds N = 8192, CPU usage: 37%, time = 39 seconds In Python, using joblib, I get: N = 512, CPU usage: 25%, time = 4 seconds N = 1024, CPU usage: 34%, time = 12 seconds N = 2048, CPU usage: 53%, time = 22 seconds N = 4096, CPU usage: 67%, time = 34 seconds N = 8192, CPU usage: 75%, time = 53 seconds So both C++ and Python increase in time spent as N goes up. But I don't understand why CPU usage in C++ goes down as N goes up while Python does the opposite .... Offhand, Python joblib's CPU behaviour should make more sense right? - since more CPU should be consumed as N goes up..
Link L
1

голосов
0

ответ
133

Просмотры

Python 3.6.5, параллелизм с multiprocessing.dummy.Pool.map ()

Так что я пытаюсь запустить определенную функцию f (х) над списком л с Pool.map (), как описано в http://chriskiehl.com/article/parallelism-in-one-line. она идет как бассейн = ThreadPool (8) pool.map (F, L) pool.close () pool.join () Проблема я столкнулся, является то, что она в основном перебирает первые семь пунктов в списке, не прибегая дальше , когда ожидаемое поведение является назначение каждого восьмого элемента для его собственной резьбы, не знаю, как еще описать это, но вы получите точку. Как это показано в статье. Итак, что же здесь не так?
ExMachina
1

голосов
1

ответ
42

Просмотры

Why can't I get gain parallelization benefits with more processes?

У меня есть этот простой код, который просто вычисляет сумму матриц после некоторой умножения матриц четкости serial_decohere (K, Rho, п): «»»: пары K: Список ухабистых матриц размера 2 ^ п по 2 ^ п: PARAM Rho: матрица размера 2 ^ п на 2 ^ п: п пары: Целое число: возвращение: матрица размера 2 ^ п на 2 ^ п ""»Out = np.zeros ((POW (2, п), ПР (2 , п)), DTYPE = комплекс) для г в диапазоне (LEN (к)): выход + = np.dot (к [I], np.dot (Rho, op.ctranspose (к [я]))) возвращение из числа слагаемых в сумме растет экспоненциально с переменным п. Более конкретно, длина списка K растет как 3 ^ п. Поэтому я решил распараллелить его. Использование joblib я пришел с этим DEF декогерирует (K, Rho, п): «»»: пары K: Список матриц размера 2 ^ п по 2 ^ п: пары Rho: матрица размера 2 ^ п на 2 ^ п : пары п: положительное целое число: возвращение: Зачем? Я мог бы попытаться написать код и с помощью модуля многопроцессорной, но я предполагая, что joblib взял намного больше мысли и время, и, по существу, делает что распараллеливание для цикла.
Amara
1

голосов
0

ответ
213

Просмотры

питон не параллельно нет пространства косяка рассола

Я использую Parallel из joblib в моем питона обучать CNN. структура кода, как: CRF = КРФ () с параллельным (n_jobs = num_cores), как pal_worker: для эпохи в диапазоне (N): темп = pal_worker (задержка (crf.runCRF) (х [I], у [I]) для I в пределах (м)) код может успешно работать в течение 1 или 2 эпохи, то произошла ошибка говорит (я перечисляю главный момент, который я думаю, что вопросы): ...... Файл «/ data_shared / Docker / цун /software/anaconda3/envs/pytorch04/lib/python3.5/site-packages/joblib/numpy_pickle.py», строка 104, в write_array pickler.file_handle.write (chunk.tostring () 'C') OSError: [Errno 28] нет места на устройстве «»»пространство выше исключение не было непосредственной причиной следующего исключения: обратный future.result (тайм-аут = тайм-аут) Файл ...... _pickle.PicklingError: не удалось законсервировать задачу, чтобы отправить его для рабочих. Я смущен, так как диск имеет много места, и программа может успешно работать в течение 1 или 2 эпохи. Я также попытался: с параллельным (n_jobs = num_cores, temp_folder = '/ DEV / ГИМ / TEMP'), как pal_worker: т.к. '/ DEV / ГИМ / TEMP' имеет много места, но она не работает. Может кто-нибудь помочь, пожалуйста? Большое спасибо!
Ting Sun
1

голосов
1

ответ
191

Просмотры

interpolate.griddata использует только одно ядро

Я интерполируя 2d Numpy массив заполнить недостающие значения, отмеченные NaN. Следующий код работает, но использует только одно ядро. Существуют ли более эффективные функции, которые я могу использовать, чтобы использовать все 24 ядер, что у меня есть? х = np.arange (0, array.shape [1]) у = np.arange (0, array.shape [0]) #mask недопустимые значения массива = np.ma.masked_invalid (массив) хх, уу = пр. meshgrid (х, у) #get только действительные значения x1 = хх [~ array.mask] у1 = уу [~ array.mask] newarr = массив [~ array.mask] GD1 = interpolate.griddata ((x1, y1) , newarr.ravel (), (хх, уу), метод = 'кубическая')
torpedo
1

голосов
0

ответ
54

Просмотры

R разветвление и окружающая среда / указатели

При использовании распараллеливания R, кажется, скопировать все, что возвращается из дочернего процесса, даже если объекты не изменяется. В частности, рассмотрим следующий пример: ENV1
NLN944
1

голосов
1

ответ
95

Просмотры

Имеет ли выполнять асинхронно Task.Run код ()?

Я определил этот блок кода. Может кто-нибудь сказать мне, если этот код является асинхронным или параллельно? Этот блок кода только лишь в качестве примера. Он создает четыре потока и в конце концов ждет все нити, чтобы быть полными. общественный Form1 () {InitializeComponent (); вар t1 = Task.Run (() => {GetSum ();}); вар t2 = Task.Run (() => {GetSum ();}); вар t3 = Task.Run (() => {GetSum ();}); вар t4 = Task.Run (() => {GetSum ();}); Task.WaitAll (t1, t2, t3, t4); } Частный INT GetSum () {INT сумма = 0; для (INT I = 0; г <int.MaxValue; я ++) {сумма + = я; } Вернуть сумму; }
Nguyen Tu Khoa
1

голосов
0

ответ
174

Просмотры

FMPy и Dymola распараллеливание

Я генерация Co-Simulation FMU с использованием Dymola. FMU потребляется FMPy. Есть внешние термодинамические вызовы в модели. Когда флаг Advanced.ParallelizeCode Dymola установлен в ложный, FMU можно запустить FMPy и Dymola. Когда флаг Advanced.ParallelizeCode Dymola устанавливается истина, то FMU можно запустить Dymola, но не с помощью FMPy. Что может быть причиной этой проблемы? Спасибо!
Neotake
1

голосов
0

ответ
75

Просмотры

Моделирование изображения с GNU параллельно на нескольких узлах кластера на HPC

Для моего исследования я делаю моделирование изображений с использованием стороннего программного обеспечения, которое я бег на высокой производительности вычислительного кластер нашего университета. Входные аргументы программного обеспечения являются начало и конец (х, у) -координаты той части, чтобы быть смоделированы. Это позволяет мне моделировать только один пиксель в точке (х, у), или, например, небольших кластеров NxN пикселов. Размеры изображения я имитирующие являются в большинстве 256х256 пикселей. Для каждого вызова, программное обеспечение для загрузки тех же четырех файлов, которые определяют «объект», чтобы быть изображенными. Эти файлы являются около 500 Мб каждый. Расчет занимает около 10 секунд на один пиксель, и, наконец, записывается в общем выходной файл. Подводя итог, программное обеспечение имеет следующий рабочий процесс для каждого вызова: Load «объекта» файлы Инициировать расчет интенсивность Calculate для желаемого пикселя (ов) Напишите интенсивности к общему выходному файлу в правильном месте я бег этих последовательные работ параллельно с использованием GNU параллельно с менеджером SLURM нагрузки. Когда я начинаю эту работу, несколько узлов на КВД защищены. Тем не менее, я замечаю, что использование процессора затухает серьезно, когда я требую все больше и больше ядер. Когда я смотрю на выходе «--progress» вызов GNU параллельно, я вижу, что только один узел занят. Поэтому я ожидаю, что, несмотря на резервирование нескольких узлов, только один узел работает. Как я могу убедиться, что работы фактически распределены по зарезервированным узлам? Код выглядит следующим образом: #SBATCH --ntasks = 200 #SBATCH --cpus-за задачи = 1 ...
Eztys
1

голосов
1

ответ
17

Просмотры

time.time () библиотека возвращает неожиданный результат при использовании joblib

У меня есть программа, которая создает несколько экземпляров класса, тест, а затем делает некоторую работу на каждом экземпляре класса, отслеживать, сколько времени работа заняла. Недавно я решил распараллелить этот код с помощью библиотеки joblib, и я бегу в ошибку: переменная Total_time в конце теперь 0,0. Среда питонов на моей машине $ python3 Python 3.7.0 (по умолчанию, 18 сентября 2018, 18:47:08) [Clang 10.0.0 (лязг-1000.10.43.1)] на Дарвине Ниже приводится MCVE по этому вопросу: импорт импорт во время случайного импорта многопроцессорной классы импорта joblib Тест: Защита __init __ (Я): self.name = "" self.duration = 0,0 защиту add_test (а): температура = Test () temp.name = ул (а) обратки Защиты run_test (тест): test_start = time.time () Rand = random.randint (1,3) time.sleep (RAND) test_end = время. Время () test.duration = круглые (test_end - test_start, 3) печать (е "Test {} test.name побежала {test.duration}") Защита основных (): тесты = [] для в диапазоне (1, 10): tests.append (add_test (а)) num_cores = multiprocessing.cpu_count () joblib.Parallel (n_jobs = num_cores) (joblib.delayed (run_test) (тест) для испытания в тестах) Total_time = круглая (сумма (тест. продолжительность испытания в тестах), 3) печать (ф «Этот пробег взял {Total_time} секунд.»), если __name__ == «__main__»: основной () Если добавить печать (список (test.duration для испытания в тестах) ) в главной (), я понимаю, что test.duration 0.0 после run_test () вызывается. можно видеть из выполнения выше входа, test.duration установлен на ненулевое значение (где это уместно) внутри run_test (). Я не слишком хорошо знаком с классами питона или библиотекой joblib, так что я не уверен, что если этот вопрос я испытываю это связано с неправильным использованием классов или какой-либо другой вопрос, что это за меня. Спасибо!
L L
1

голосов
1

ответ
197

Просмотры

Jenkins параллельные задания из цикла

) {Шаги {параллельные задачи}}}} Есть ли способ исправить это? Спасибо
kotyara85
1

голосов
1

ответ
400

Просмотры

Запуск нескольких процессов одновременного Rsync скопировать один файл в каждом подкаталоге (maxdepth -1)

Я хотел бы превратить простую Rsync команду, которая копирует один файл (robots.txt) для целевых подпапок, расположенных на 1 глубине уровня (maxdepth -1) в многопоточном команду, в которой параллельно, или любое другое решение, которое ускоряет передачу: Plain Rsync: поиск / главная / targetfolders * -maxdepth 1 -type d -exec Rsync -av /home/source/utils/robots.txt {} \; Что было бы лучшим решением?
Robert Eduard Antal
1

голосов
1

ответ
36

Просмотры

Use multithreading to increase the speed of web scrape

У меня есть немного затруднительном положении. Существует URL-адрес в формате: https://www.example.com/blahblah/moreblah.php?x=123456789&lang=en Как вы можете видеть, есть уникальный идентификатор в запросе (в данном примере UID = 123456789). Сценарий, который я написал потянет всю необходимую информацию для страницы, где х = 123456789. Я также поместил сценарий в петлю, и это увеличивает подсчет UID на единицу (см. Ниже) Лишь около 4% всех UIDs есть данные, но у меня нет никакого способа определить, какие UIDs содержат данные (я пробовал генерировать XML Sitemap без особой удачи - держать получение «сайт не индексируемый»)). Существующий код работает, проблема в том, что этот метод будет слишком долго. Я сделал несколько быстрых математику, и он будет (в теории) потребуются годы, чтобы проверить каждый из UIDs между 0 и 54 миллионов (я исследовал сайт и нашел UIDs до 53 миллионов). Есть несколько вариантов, на мой взгляд: 1. Многопоточность / регулированием количества (не знаю, как это сделать). Кроме того, способ, цикл установки ниже, один цикл должен закончить для того, чтобы UID, чтобы увеличить на 1 до следующего запроса может быть выполнена (см строки 20). 2. Найти способ обхода сайта и определить, какие именно должны быть соскабливают, а затем ограничить цикл до тех точных идентификаторов идентификаторов. Я открыт для других предложений тоже. импорт urllib2 из BS4 импорта BeautifulSoup прокси = urllib2.ProxyHandler ({ 'HTTPS': xxx.xx.xxx.xxx:xxxx}) открыватель = urllib2.build_opener (прокси) urllib2.install_opener (нож) UID = 0 Защиту царапать (UID) : в то время как UID <54000000: страница = urllib2.urlopen ( "https://www.example.com/blahblah/moreblah.php?x={}&lang=en" .format (ул (UID))) суп = BeautifulSoup ( страница, 'html.parser') х = суп.
Mick_eh

Просмотр дополнительных вопросов