首页 > 解决方案 > 多处理未在 Python 中并行执行

问题描述

我已经编辑了代码,目前它工作正常。但认为它不是并行或动态执行。任何人都可以检查一下吗

代码 :

def folderStatistic(t):
    j, dir_name = t
    row = []
    for content in dir_name.split(","):
        row.append(content)
    print(row)

def get_directories():
    import csv
    with open('CONFIG.csv', 'r') as file:
        reader = csv.reader(file,delimiter = '\t')
        return [col for row in reader for col in row]

def folderstatsMain():
    freeze_support()
    start = time.time()
    pool = Pool()
    worker = partial(folderStatistic)
    pool.map(worker, enumerate(get_directories()))

def datatobechecked():
    try:
        folderstatsMain()
    except Exception as e:
        # pass
        print(e)

if __name__ == '__main__':
    datatobechecked()

配置文件

C:\USERS, .CSV
C:\WINDOWS , .PDF
etc.

config.csv 中可能有大约 200 个文件夹路径

标签: pythoncsvmultiprocessing

解决方案


欢迎来到 StackOverflow 和 Python 编程世界!

继续这个问题。在get_directories()函数内部,您在with上下文中打开文件,获取reader对象并在您离开上下文后立即关闭文件,因此当需要使用读取器对象时,文件已经关闭。

我不想让您气馁,但如果您对编程非常陌生,请不要深入研究并行编程。随着您添加的每个线程,同时处理多个线程的难度呈指数增长(尽管池大大简化了此过程)。进程更糟糕,因为它们不共享内存并且不能轻松地相互通信。

我的建议是,首先尝试将其编写为单线程程序。如果您让它工作并且仍然需要并行化它,请使用输入文件路径作为参数隔离单个函数来完成所有工作,然后在该函数上使用线程/进程池。

编辑:根据我从您的代码中可以理解的内容,您从 CSV 文件中获取目录名称,然后为您运行的文件中的每个“单元格” parallel folderStatistics。这部分似乎是正确的。问题可能在于dir_name.split(","),请注意您将单个“单元格”传递给folderStatistics非行。是什么让您认为它没有并行运行?


推荐阅读