2013-08-10 2 views
0

У меня есть функция, которая будет (на основе параметров) перемещать/переименовывать файлы изображений с подключенного устройства чтения карт в Windows на серверный диск после того, как файл будет переименован с использованием шаблона и добавит добавочное число из цикл for.Асинхронный запуск функций Python

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

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

Бедная попытка проиллюстрировать то, что я пытаюсь сделать следующее:

def collectCards(cards): 
    for card in cards: 
     #my goal would be to run each instance of the following function asynchronously 
     drv =renameImages(card) 

def renameImages(cardDrive): 
    #perform renaming functions 
    return count_of_renamed_images 

ответ

2

Вы можете попробовать использовать multiprocessing с процессами (Pool) или нитей (pool.ThreadPool). В обоих случаях, единственное различие заключается в импорте - АНИ остается прежним:

from multiprocessing import Pool 

my_pool = Pool(3) 
# `cards` is a list of cards. Send rename requests to workers. 
my_pool.map(renameImages, cards) 

# Close the pool and wait for processes to close. 
my_pool.close() 
my_pool.join() 

Число в Pool(3) указывает число рабочих процессов - больше средств большее число одновременных renameImages функций работает. Имейте в виду, что multiprocessing требует card объектов для маринования. Если renameImages не тяжел в памяти, вы можете попробовать использовать ThreadPool - card объекты затем разделяются между потоками.

Смежные вопросы