При запуске функции в многопроцесорном режиме исполняется код который не является частью этой функции

Рейтинг: 0Ответов: 1Опубликовано: 27.05.2023

Доброго всем времени суток! Работаю над программой которая построчно считывает списки из текстовых файлов и сравнивает с внесенным списком, для ускорения программы используется режим многопроцессорности, но при запуске функции в многопроцессорном режиме исолняется код который не является частью этой функции, то есть тот код с которого программа начинается, если же я запускаю этот код в обычном режиме (то есть просто вызываю функцию) то программа исполняется правильно.

Вот пример программы с такой же проблемой только без цикла (команда print('111111111111111111111')исполняется в мнгопроцессорном режиме, а должно в однопроцессорном )`

import time
from multiprocessing import Pool

print('111111111111111111111111111111111111111111111111111111111111111111111111111')

def tr():
    t = 2
    return t

def read(z):
    x = 0
    t = tr()
    while x < 6:
        time.sleep(0.1)
        x = x + 1
        s = t * z
    print(s)
    return s

if __name__ == '__main__':

    pool = Pool(6)
    f = [2, 4, 6, 8, 10, 12]
    res = pool.map_async(read, (f))
    print(res.get())
    pool.close()
    pool.join()

А если сам запуск функции произвожу в цикле то программа еще и ужасно тормозит ( в моем случае это цикл for для построчного считывания текстового файла но суть проблеммы от этого не меняется )

ПРИМЕР

while True:
    if __name__ == '__main__':

        pool = Pool(6)
        f = [2, 4, 6, 8, 10, 12]
        res = pool.map_async(read, (f))
        print(res.get())
        pool.close()
        pool.join()

Пожалуйста помогите разобратся в чем проблемма

Ответы

▲ 0

Правильно работающая программа!

import time
from multiprocessing import Pool



def tr():
    t = 2
    return t

def read(z):
    x = 0
    t = tr()
    while x < 6:
        time.sleep(0.1)
        x = x + 1
        s = t * z
    print(s)
    return s

if __name__ == '__main__':
    print('1111111111111111111111111111111111111111')
    while True:
        pool = Pool(6)
        f = [2, 4, 6, 8, 10, 12]
        res = pool.map_async(read, (f))
        print(res.get())
        pool.close()
        pool.join()

ОГРОМНОЕ СПАСИБО insolor !