многопроцессорность против многопоточности в ноутбуке Jupyter - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь протестировать пример на здесь , изменив его с многопоточности на многопоточность.

При запуске этого (оригинального примера) в блокноте jupyter отобразится индикатор выполнения, который заполняется внекоторое время.

import threading
from IPython.display import display
import ipywidgets as widgets
import time
progress = widgets.FloatProgress(value=0.0, min=0.0, max=1.0)

def work(progress):
    total = 100
    for i in range(total):
        time.sleep(0.2)
        progress.value = float(i+1)/total

thread = threading.Thread(target=work, args=(progress,))
display(progress)
thread.start()

Если я изменю код на многопроцессорность, появится индикатор выполнения, но он не заполняется:

import multiprocessing as mp
from IPython.display import display
import ipywidgets as widgets
import time
progress = widgets.FloatProgress(value=0.0, min=0.0, max=1.0)

def work(progress):
    total = 100
    for i in range(total):
        time.sleep(0.2)
        progress.value = float(i+1)/total

p = mp.Process(target = work, args=(progress,))
display(progress)
p.start()

Если я изменю вышеприведенное, добавив print(i) в рабочем цикле индикатор выполнения волшебным образом начинает заполняться.

import multiprocessing as mp
from IPython.display import display
import ipywidgets as widgets
import time
progress = widgets.FloatProgress(value=0.0, min=0.0, max=1.0)

def work(progress):
    total = 100
    for i in range(total):
        print(i)
        time.sleep(0.2)
        progress.value = float(i+1)/total

p = mp.Process(target = work, args=(progress,))
display(progress)
p.start()

Это ошибка или есть что-то фундаментальное, чего я здесь не вижу?

Редактировать (информация о системе)

ОС Ubuntu 18.04

$jupyter --version 
4.4.0
import sys; sys.version 
3.7.0 (default, Oct 15 2018, 10:26:13) \n[GCC 7.3.0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...