Карта Python Threadpool, кажется, висит - PullRequest
0 голосов
/ 17 февраля 2019

Этот фрагмент кода в потоке Python, кажется, выполняет только одну запись repoPathList и ничего не делает.Наверное, зависает.Я не уверен, что мои два уровня параллелизации имеют проблемы.Вот краткий код: он печатает только эту строку print("STARTED:" + repoPath) и никогда не попадает в эту строку print("COMPLETED:" + repoPath) в первой отображенной функции computeRepoMetrics(repoPath).Затем он никогда не обрабатывает другую запись repoPathList.Что-то не так с моим распараллеливанием?

repoPathList = ["/Users/soft/PycharmProjects/Pydriller/gitRepos/attic-whirr",
                "/Users/soft/PycharmProjects/Pydriller/gitRepos/sqoop",
                "/Users/soft/PycharmProjects/Pydriller/gitRepos/ranger",
                "/Users/soft/PycharmProjects/Pydriller/gitRepos/falcon"
                "/Users/soft/PycharmProjects/Pydriller/gitRepos/aries"]
def computeRepoMetrics(repoPath):
    print("STARTED:" + repoPath)
    gr = GitRepository(repoPath)
    parallelMetricProcessing(analyzeCommits(repoPath,gr), calculateStructAndSemanticScattering(gr), 30,gr)
    print("COMPLETED:" + repoPath)

def parallelMetricProcessing(intervalsData, scatteringFilePairData, threads,gr):
    tupledIntervalsData =[]
    for i in range(len(intervalsData)):
        if i > 0:
         tupledIntervalsData.append((intervalsData[i],intervalsData[i-1],i))
        else:
         tupledIntervalsData.append((intervalsData[i], [],i))
    data = map((lambda x: (x,scatteringFilePairData,gr)), tupledIntervalsData)
    pool = ThreadPool(threads)
    pool.map(compute_fileMetrics, data)
    pool.close()
    pool.join()

def main():
    pool = ThreadPool(5)
    pool.map(computeRepoMetrics, repoPathList)
    pool.close()
    pool.join()
...