我有一个函数(基于参数)在使用模板重命名文件并附加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
答案 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
对象然后在线程之间共享。