Прекращение многопроцессорности с консоли не работает - PullRequest
0 голосов
/ 28 мая 2020

У меня проблемы с завершением моих пулов с консоли. Нажатие «Остановить текущую команду» не работает, так как рабочие продолжают процесс после этого. Я безуспешно пытался набрать pool.terminate () в консоли.

Мой код выглядит примерно так (упрощенно, извиняюсь за предупреждение ODE):

import collections
import multiprocessing
import time
from scipy.integrate import odeint
import numpy as np


class Chemostat(object):

    def __init__(self, Parameter1, Parameter2):
        self.Parameter1 = Parameter1 
        self.Parameter2 = Parameter2

    def initialise(self):
        self.Parameter3 = self.Parameter1 *  self.Parameter2

    def run(self):
        self.initialise()
        t = np.linspace(1, 100, 100)
        y0 = self.Parameter3
        sol = odeint(self.dXdt, y0, t)
        self.output = sol                

    def dXdt(self,X,t):
       out = X**t
       return out

def model_function(x):
    print(f'Processing experiment')
    time.sleep(15)
    model=Chemostat(Parameter1 = x.Parameter1, Parameter2 = x.Parameter2)
    model.run()
    out = model.output
    print(f'Experiment completed')
    return out

Experiment = collections.namedtuple('Experiment',[
    'Parameter 1',
    'Parameter 2',
])

experiments = (
    Experiment(Parameter1 = 0, Parameter2 = 0.17),   
    Experiment(Parameter1 = 2, Parameter2 = 0.15),   
)

pool = multiprocessing.Pool(6)
results = pool.map(model_function, experiments)

Я безуспешно пытался воспроизвести ошибку без указания, так что, возможно, проблема в этом?

Большое спасибо!

Редактировать: Я использую Python 3.7

Edit2: эта проблема сохраняется в jupyter qtconsole (предполагая, что это не просто spyder)

...