pool.apply_asyn c, pool.map с довольно сложной функцией - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть функция, которая вычисляет приближение дивергенции KL в более высоких измерениях. Внутри он использует sklearn.NearestNeighbors и вычисления на np.arrays. Его называют KLnn (P), где P.shape = (10000,2). Я хочу применить это на многих входах P. [P0, P1, ...]. Поэтому я подал заявку на тестирование на одном входе:

if __name__ == '__main__':
    with Pool() as p:
        res = p.apply_async(KLnn, (P,))
        print(res.get(timeout = 1))       

Я получил тайм-аут, и он не вызван вычислением функции, так как вызов функции намного ниже 1 se c. Поэтому я попытался:

if __name__ == '__main__':
    with Pool() as p:
        print(p.map(KLnn, [P]))
        p.close()
        p.join()

, который затем заходит в тупик. В обоих случаях я бы ожидал, что он просто вычисляет KLnn (P).

Оба фрагмента кода были просто извлечены из многопроцессорной документации. python пример.

1 Ответ

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

Я обнаружил, что ОС Windows 10 вместе со spyder не подходит для многопроцессорного пакета. Этот игрушечный пример и apply_asyn c в понимании списка хорошо работает в командной строке cmd / anaconda. Однако, будучи новичком в области параллельной обработки, это было не первое предположение, что проблема заключается в IDE / OS.

...