Я экспериментирую с использованием concurrent.futures.ProcessPoolExecutor
для распараллеливания последовательной задачи. Последовательная задача включает в себя поиск числа вхождений данного числа из диапазона чисел. Мой код показан ниже.
Во время его выполнения я заметил в Диспетчере задач / Системном мониторе / top, что постоянно работает только один процессор/поток, несмотря на то, что max_workers processPoolExecutor
имеет значение больше 1. Почему это так? Как я могу распараллелить свой код, используя concurrent.futures?
Мой код был выполнен с помощью python 3.5.
import concurrent.futures as cf
from time import time
def _findmatch(nmax, number):
print('def _findmatch(nmax, number):')
start = time()
match=[]
nlist = range(nmax)
for n in nlist:
if number in str(n):match.append(n)
end = time() - start
print("found {} in {}sec".format(len(match),end))
return match
def _concurrent(nmax, number, workers):
with cf.ProcessPoolExecutor(max_workers=workers) as executor:
start = time()
future = executor.submit(_findmatch, nmax, number)
futures = future.result()
found = len(futures)
end = time() - start
print('with statement of def _concurrent(nmax, number):')
print("found {} in {}sec".format(found, end))
return futures
if __name__ == '__main__':
match=[]
nmax = int(1E8)
number = str(5) # Find this number
workers = 3
start = time()
a = _concurrent(nmax, number, workers)
end = time() - start
print('main')
print("found {} in {}sec".format(len(a),end))