Многопроцессорность не вызывает функции

Я пытаюсь перенести свои изображения из папки в массив и обрабатывать их одно за другим. Но я хочу делать это параллельно. Я пытался реализовать каждое изображение в другом процессе и выполнить, но это не работает

мой код:

import numpy as np
import os
import cv2
from multiprocessing import Process
import time

file_path=[]
path = "C:/Users/User/Desktop/Dataset_Screens/picture_dataset_Small/"
for root,dir,files in os.walk(path):
    for f in files:
        file_path.append(os.path.join(root,f))


path1 = "C:/Users/User/Desktop/Dataset_Screens/picture_dataset_Big/"
for root1,dir1,files1 in os.walk(path1):
     for f1 in files:
        file_path.append(os.path.join(root1,f1))

print(len(file_path))


def get_image(inputfilepath):
    img_original= cv2.imread(inputfilepath)
    img_array=np.asarray(img_original)
    blur= cv2.pyrMeanShiftFiltering(img_original,21,49)
    gray_image= cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)
    ret,thresh= cv2.threshold(gray_image,70,255,cv2.THRESH_BINARY)    
    _, contours,hierarchy =cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    countourimage=cv2.drawContours(img_original,contours,-1,0,3)

    largest_area=0
    print('I am inside the loop')
    for i,c in enumerate(contours):
        contour_areas=cv2.contourArea(c)
        if (contour_areas>largest_area):
            largest_area= contour_areas
            x_rect,y_rect,w_rect,h_rect=cv2.boundingRect(c)
            cropped=img_original[y_rect:y_rect+h_rect,x_rect:x_rect+w_rect]

    cv2.imwrite('C:/Users/User/Anaconda3/contourimage.jpg',cropped)

t= time.time()      
if __name__ == '__main__':

    for i in range(4):
        p = Process(target=get_image, args=(file_path[i],))
        p.start()

print('Done in ', time.time()-t)
print('We are DONEEEEEEE!!!!!!')

Я использую Spyder, который, похоже, тоже не работает, поэтому я запустил приглашение conda, и результаты показаны ниже:

Вывод в spyder:

132
Done in  0.022994279861450195
DONEEE!!

Вывод в приглашении conda:

C:\Users\User\Anaconda3>python examples.py
132
Done in  0.05248904228210449
DONEEE!!
132
Done in  0.0
DONEEE!!
132
Done in  0.0
DONEEE!!
132
Done in  0.0
DONEEE!!
132
Done in  0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
Corrupt JPEG data: premature end of data segment
Corrupt JPEG data: premature end of data segment
Corrupt JPEG data: premature end of data segment
I am inside the loop
I am inside the loop
I am inside the loop
I am inside the loop

Я пытаюсь преобразовать свою программу Python в параллельную, чтобы уменьшить время, затрачиваемое

Я добавил p.join () к функции

if __name__ == '__main__':
    for i in range(4):
        p = multiprocessing.Process(target=get_image, args=(file_path[i],))
        p.start()
        p.join()

и вывод в spyder:

132
Done in  30.90500521659851
DONEEE!!

и подсказка conda:

C:\Users\User\Anaconda3>python examples.py
132
132
Done in  0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
I am inside the loop
132
Done in  0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
I am inside the loop
132
Done in  0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
I am inside the loop
132
Done in  0.0
DONEEE!!
Corrupt JPEG data: premature end of data segment
I am inside the loop
Done in  30.726163625717163
DONEEE!!

Я абсолютный новичок в параллельной обработке .. Пожалуйста, предложите .. Заранее спасибо !!

Пожалуйста, проверьте это. Похоже, это не проблема параллельной обработки Python: stackoverflow.com/questions/30237613/… и github.com/Haneke/Haneke/issues/4

Rambarun Komaljeet 09.10.2018 14:55

Спасибо за ответ ... Я просмотрел ссылки, но, похоже, не ответил на мой запрос, потому что я думаю, что если бы проблема была в данных изображения, spyder также должен был выдать ошибку ... но в spyder функция не вызывается в все

user9557119 09.10.2018 16:48

Как определить, что функция вообще не вызывается? Я думаю, он действительно вызывается, просто вторичные процессы не получают доступа к терминалу и не могут печатать. Попробуйте создать некоторые другие эффекты, такие как ввод-вывод файла, и посмотрите, имеет ли это какой-либо эффект.

JohanL 10.10.2018 20:40

Я тоже мог ошибаться ... но я попытался поместить оператор печати в качестве первого оператора в определенном методе, но он никогда не печатался, поэтому думал, что он вообще не вызывает ... Я работаю над spyder, который не работал, поэтому я попытался запустить командную строку и все то же самое ..

user9557119 11.10.2018 08:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
115
0

Другие вопросы по теме