Я борюсь с многопроцессорностью. У меня есть тяжелая обработка изображений, и я хотел использовать многоядерный процессор. Однако я много пробовал и, наконец, хотел использовать модуль 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