BrokenProcessPool: процесс в пуле процессов был внезапно прерван [Spyder] - PullRequest
0 голосов
/ 06 марта 2020

Я использую следующий код в Python 3.7, используя Spyder 3.3.2.

Если я запускаю код вручную (ie: в Редакторе Spyder я выбираю импорт библиотеки, нажимая «F9» ", затем я выбираю функцию, которую хочу запустить, и нажимаю" F9 "), она работает.

Но если я нажимаю" Play "на панели инструментов, чтобы запустить файл завершения, он не работает, и я get:

BrokenProcessPool: A process in the process pool was terminated abruptly while the future was running or pending

Мне известно о проблеме в Spyder, и я уже работаю в текущем WD. Я также использовал уловку if __name__ = __main__: для запуска своей функции как main ().

Код, который я создаю, предназначен для использования людьми, не знакомыми с программированием, поэтому для них это очень безопаснее нажать кнопку «Воспроизвести», чем выбрать и запустить заданный c фрагмент кода.

Вот код, содержание функции которого не вызывает проблем и хорошо паралелизируется при работе, используя 100 % из 8 ядер. Если это помогает, самый большой импортируемый файл - меньше чем 1 МБ.

from concurrent.futures import ProcessPoolExecutor
import pandas as pd
import numpy as np
from MPO_PROC import N_tab, N_tab_FCT, TYPE, TR
from MPO_FUNC import *

def main():

    """ Set the variables for the loop """
    alpha = 0.05
    alg_type = TYPE
    futures = []
    e = ProcessPoolExecutor(8)

    if alg_type == "O":
        F = FFR_ME
    elif alg_type == "NO":
        F = FFR_ME_NO
    else :
        raise TypeError("Algortithm type selected does not exist. Must be 'O' or 'NO'")

    """ Loop over the different task summarized in the tab 'N_tab' during the MPO_PROC step. """
    for task in N_tab["TASK_NUMBER"]:

         """ Declare variables N, n , f based on the previous calculations """ 

         N = N_tab_FCT.loc[N_tab_FCT["TASK_NUMBER"] == task, "N_Task"]
         n = N_tab_FCT.loc[N_tab_FCT["TASK_NUMBER"] == task, "n_i"]
         f = N_tab_FCT.loc[N_tab_FCT["TASK_NUMBER"] == task, "F"]

         """" Implement the function using the concurrent.future module for multiprocessing. """ 

         for Ni, ni, fi in zip(N,n,f):

             future = e.submit(F, Ni, ni, fi, alpha)                
             futures.append(future)

    results = [ff.result() for ff in futures] 

    for i in range(len(results)):
        f = int(N_tab_FCT.loc[i, "F"])                                                
        N_tab_FCT.loc[i,"LBound"] = results[i][0][f]
        N_tab_FCT.loc[i,"UBound"] = results[i][1][f]
        N_tab_FCT.loc[i,"ME"] = (N_tab_FCT.loc[i,"UBound"] - N_tab_FCT.loc[i,"LBound"])/\
                                               (2*N_tab_FCT.loc[i,"N_Task"])
        N_tab_FCT.loc[i,"FFR"] = (N_tab_FCT.loc[i,"LBound"] + (N_tab_FCT.loc[i,"UBound"] - N_tab_FCT.loc[i,"LBound"])/2)/\
                                                N_tab_FCT.loc[i,"N_Task"]                                                

if __name__ == "__main__":
    main()

Спасибо.

...