Почему эта очередь не работает в многопроцессорной среде? (Метод append () в теле функции) - PullRequest
0 голосов
/ 20 июня 2019

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

Вот мой псевдокод, состоящий из трех частей: функция для создания списка предложений из строк, список строк и список результатов для добавления предложений и основной код для реализации очереди и многопроцессорной обработки.

def process_string(que_object):

    while que_object.empty():
       time.sleep(2)

    q = que_object.get(timeout=2)
    sentence = "Here is your string_"+q
    print(sentence)
    final_sentence.append(sentence)

strings =["alskfj","alksjf"...]
final_sentences = []

if __name__ == "__main__":

    que_object = Queue()
    for i in strings:
        que_object.put(strings[strings.index(i)])
        #print(strings[strings.index(i)])
    #print(que_object)

    with Manager() as manager:
        L = manager.list(strings)
        process_list =[]
        for i in range(2):
            p = Process(target =process_string,args=(que_obejct,))
            process_list.append(p)
            p.start()
        for i in range(2):

            p.join()
            #time.sleep(1)
        print(final_sentences)

1 Ответ

1 голос
/ 20 июня 2019

multiprocessing.Process - это, как следует из названия, отдельные процессы на уровне ОС.поэтому, когда вы делаете final_sentence.append, это делается в памяти / адресном пространстве другого процесса и, следовательно, невидимо для процесса, который выполняет print(final_sentences)

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

...