Часы фонового потока в лаборатории Jupyter

В моем блокноте Jupyter я хочу выполнить несколько длительных фоновых заданий и отобразить их статус в ячейке. Я подумал, прежде чем делать что-то сложное, я мог бы начать с часов.

У меня есть следующий код в одной ячейке

import ipywidgets as widgets
import time
from datetime import datetime as dt
from IPython.display import HTML
from IPython.display import display
import threading

out = widgets.Output()

@out.capture(clear_output=True, wait=True)
def display_time():
    now = dt.now().strftime("%H:%M:%S")
    display(HTML(f"""<h1><center>{now}</center></h1>"""))

def run_time():
    while True:
        time.sleep(1)
        display_time()

out

Когда я звоню run_time(), время обновляется каждую секунду, но моя записная книжка блокируется в этой ячейке. Итак, я попробовал threading.Thread(target=run_time).start(), но это почему-то только обновляет время всякий раз, когда я взаимодействую с блокнотом. Как я могу обновить записную книжку, даже если я не взаимодействую с ячейками?


person asPlankBridge    schedule 07.08.2019    source источник
comment
Удалось ли вам сделать то, что вы хотели? Если да, то что вы использовали?   -  person Benoit Drogou    schedule 13.08.2019


Ответы (1)


Вы хотите взглянуть на ipyrallel для запуска нескольких ядер в своем ноутбуке.

Вот решенная проблема

Вот документация

person Benoit Drogou    schedule 07.08.2019
comment
Если я правильно понимаю, ipyrallel можно использовать для многопоточности вообще — а также для кластеров. Все, что я хочу сделать, это запустить отдельный поток, который отображает данные в блокноте. Я надеялся, что есть что-то проще. - person asPlankBridge; 14.08.2019
comment
Да, это позволяет вам выбрать, какое ядро ​​вашего ноутбука будет использоваться для запуска ячейки. Поэтому вы можете запустить 1 ячейку с 1 ядром для TimeClock, а остальную часть своего ноутбука запустить на другом. Это немного сложно, но это должно сработать - person Benoit Drogou; 14.08.2019