Функция работает бесконечно с вложенной функцией при многократной обработке - PullRequest
0 голосов
/ 23 апреля 2020

Я борюсь с многопроцессорностью. У меня есть тяжелая обработка изображений, и я хотел использовать многоядерный процессор. Однако я много пробовал и, наконец, хотел использовать модуль concurrent.futures, потому что он более-менее удобен в использовании. Но когда я настраиваю свою программу, она запускается, работает и работает и ... Она не останавливается Основная идея c заключается в следующем (не связанном с обработкой изображений, просто фиктивная установка):

import concurrent.futures as cf
import time
import multiprocessing as mp

def someFunc(seconds, multiplier=1):
    time.sleep(multiplier*seconds)
    return (f'Slept for {multiplier*seconds} s, Proc: {mp.current_process()}')

def parallelize(secs):

    factor=2

    def wrapper(sec):
        return someFunc(sec, factor)

    with cf.ProcessPoolExecutor() as executor:
        results=[executor.submit(wrapper, secs) for _ in range(8)]
        for result in cf.as_completed(results):
            print(result.result())

Итак, я запускаю это под windows 10 в ноутбуке Jupyter. По этой причине функции сохраняются в отдельном веселом c .py файле, который импортируется в записную книжку, а затем запускается с использованием условия if__name __ == ' main '.

import func
if __name__=='__main__':
    func.parallelize('some_int_number')

Причина, по которой я это делаю, заключается в том, что мне нужно передать два аргумента в функцию parallelize (), но метод submit () предоставляет только один аргумент. Я знаю, можно также использовать метод map () или что-то еще, но по какой-то причине (накладные расходы?!?!) Эффект распараллеливания не очень значителен (я играю с возможностями уже несколько дней). Поэтому я хотел попробовать метод submit () как предложено. НО, это не работает (скрипт работает бесконечно), и я не знаю почему. Проблема также в том, что мне нужно обработать аргумент (фактор) stati c, который известен только в области действия функции параллелизации.

Если бы я определил функцию-оболочку вне параллелизации -функция, сценарий будет работать, как ожидалось, но тогда у меня возникла проблема с факторной переменной stati c.

Есть идеи?

Привет phtagen

...