异步运行Python函数

时间:2013-08-10 19:25:40

标签: python file-io

我有一个函数(基于参数)在使用模板重命名文件并附加for循环中的递增数字后,将图像文件从Windows中的映射读卡器驱动器移动/重命名为服务器驱动器。

通常会有三张照片卡会发送到目标文件夹。目前,每张卡都是一个接一个地处理的,由于文件大小和通过网络传输可能需要相当长的时间。

有没有办法让函数接收映射的卡片驱动器列表(不超过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

1 个答案:

答案 0 :(得分:2)

您可以尝试将multiprocessing与进程(Pool)或线程(pool.ThreadPool)一起使用。在这两种情况下,唯一的区别在于导入 - API保持不变:

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对象然后在线程之间共享。