Я пытаюсь написать простой многопоточный скрипт на Python:
from multiprocessing.dummy import Pool as ThreadPool
def resize_img_folder_multithreaded(img_fldr_src,img_fldr_dst,max_num_of_thread):
images = glob.glob(img_fldr_src+'/*.'+img_file_extension)
pool = ThreadPool(max_num_of_thread)
pool.starmap(resize_img,zip(images,itertools.repeat(img_fldr_dst)))
# close the pool and wait for the work to finish
pool.close()
pool.join()
def resize_img(img_path_src,img_fldr_dest):
#print("about to resize image=",img_path_src)
image = io.imread(img_path_src)
image = transform.resize(image, [300,300])
io.imsave(os.path.join(img_fldr_dest,os.path.basename(img_path_src)),image)
label = img_path_src[:-4] + '.xml'
if copyLabels is True and os.path.exists(label) is True :
copyfile(label,os.path.join(img_fldr_dest,os.path.basename(label)))
установка аргумента max_num_of_thread
для любого числа в [1 ... 10] не улучшает мое время выполнения привсе (for 60 images it stays around 30 sec
), max_num_of_thread
= 10 мой компьютер застрял
мой вопрос: что такое горлышко бутылки в моем коде, почему я не вижу никаких улучшений?
некоторые данные о моем ПК:
python -V
Python 3.6.4 :: Anaconda, Inc.
cat /proc/cpuinfo | grep 'processor' | wc -l
4
cat /proc/meminfo
MemTotal: 8075960 kB
MemFree: 3943796 kB
MemAvailable: 4560308 kB
cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.10