Пример кода, который зависает при выполнении на нескольких процессорах - PullRequest
0 голосов
/ 10 ноября 2019

При попытке запустить следующую программу-пример зависает. Я новичок в многопроцессорности Python и не могу понять это. Программа подсчитывает, сколько чисел присутствует в заданном диапазоне в каждой строке данных, и я работаю с руководством в https://www.machinelearningplus.com/python/parallel-processing-python/

import numpy as np
import time
import multiprocessing as mp

def howmany_within_range(row, minimum, maximum):
    """Returns how many numbers lie within `maximum` and `minimum` in a given `row`"""
    count = 0
    for n in row:
        if minimum <= n <= maximum:
            count = count + 1
    return count

def main():
    pool = mp.Pool(2)

    # Prepare data
    np.random.RandomState(100)
    arr = np.random.randint(0, 10, size=[200000, 5])
    data = arr.tolist()
    print (data[:5])

    start = time.time()
    results = [pool.apply(howmany_within_range, args=(row, 4, 8)) for row in data]
    pool.close()
    end = time.time()

    print(results[:10], end-start)

if __name__=='__main__':
    main()

1 Ответ

1 голос
/ 10 ноября 2019

Он "зависает", потому что вы долго вращаете петлю. На моем ПК это закончилось за 30 секунд;вам, возможно, просто нужно дать ему большеот apply до apply_async.)

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