2015-09-12 21 views
19

Tôi sử dụng Máy tính xách tay Jupyter để chạy một loạt các thử nghiệm mất một thời gian. Một số ô nhất định mất quá nhiều thời gian để thực hiện vì vậy bình thường tôi muốn đóng tab trình duyệt và quay lại sau. Nhưng khi tôi làm hạt nhân ngắt chạy.Giữ máy tính xách tay Jupyter chạy sau khi đóng tab trình duyệt

Tôi đoán có một workaround cho điều này nhưng tôi không thể tìm thấy nó

Trả lời

6

TL; DR:

Mã không chỉ dừng lại trên tab đóng lại, nhưng sản lượng không còn có thể tìm thấy các hiện phiên trình duyệt và mất dữ liệu về cách nó được cho là được hiển thị, làm cho nó ném ra tất cả các đầu ra mới nhận được cho đến khi mã kết thúc đang chạy khi tab đóng.

Version Long:

Thật không may, điều này không được thực hiện (24 tháng 11). Nếu có cách giải quyết khác, tôi cũng không thể tìm được. (Vẫn đang tìm kiếm, sẽ cập nhật tin tức.) There is a workaround that saves output then reprints it, nhưng sẽ không hoạt động nếu mã vẫn đang chạy trong sổ ghi chép đó. Một cách khác là có một sổ ghi chép thứ hai mà bạn có thể lấy đầu ra.

Tôi cũng cần chức năng này và vì lý do tương tự. Hạt nhân không tắt hoặc ngắt khi đóng tab. Và mã không ngừng chạy khi bạn đóng một tab. Cảnh báo được đưa ra là chính xác, "hạt nhân đang bận, kết quả đầu ra có thể bị mất."

Chạy

import time 
a = 0 
while a < 100: 
    a+=1 
    print(a) 
    time.sleep(1) 

trong một hộp, sau đó đóng tab, mở nó lên một lần nữa, và sau đó chạy

print(a) 

từ hộp khác sẽ gây ra nó để treo cho đến khi 100 giây đã hoàn thành và mã hoàn thành, sau đó nó sẽ in 100.

Khi một tab được đóng lại, khi bạn quay trở lại, quá trình python sẽ ở trạng thái giống như bạn đã lưu lại (khi lần lưu cuối cùng hoàn thành). Đó là hành vi dự định của họ, và những gì họ cần phải rõ ràng hơn trong tài liệu của họ. Đầu ra từ mã chạy thực sự được gửi đến trình duyệt khi mở lại nó, (mất tham chiếu giải thích điều này), vì vậy hacks giống như một trong this comment sẽ hoạt động vì nó có thể nhận và chỉ ném chúng vào một số ô.

Đầu ra là loại chỉ được lưu theo cách có thể truy cập thông qua kết nối điểm cuối. They've been working on this for a while (before Jupyter), mặc dù tôi không thể tìm thấy lỗi hiện tại trong kho lưu trữ Jupyter (this one references it, but is not it).

Cách giải quyết chung duy nhất dường như là tìm máy tính bạn luôn có thể thoát và để lại trên trang trong khi chạy, sau đó từ xa hoặc dựa vào tự động lưu để có thể truy cập ở nơi khác. Đây là một cách tồi tệ để làm điều đó, nhưng không may, cách tôi phải làm bây giờ.

câu hỏi liên quan:

+0

Tôi không nghĩ rằng mã thực sự bị gián đoạn khi tab bị đóng. Tuy nhiên, đầu ra là, như bạn đã nói. Vì vậy, giải pháp thay thế không phù hợp mà tôi đang sử dụng là lưu trữ kết quả tính toán của mình theo cách dễ dàng tạo lại kết quả. Cụ thể là tôi lưu trữ ma trận nhầm lẫn và đường cong ROC từ phân loại của tôi và chỉ vẽ lại chúng. – ijoseph

+1

Bạn nói đúng. Cuối cùng tôi đã đi vòng quanh để kiểm tra lại điều này. Nắm bắt tốt. Tôi cũng có thêm chi tiết từ danh sách lỗi của Jupyter và IPython. Tôi sẽ săn lùng chúng và cập nhật bài đăng. – Poik

2

Tôi đang gặp khó khăn với vấn đề này một thời gian.

Cách giải quyết của tôi là ghi tất cả nhật ký vào một tệp để khi trình duyệt của tôi đóng (thực sự khi nhiều nhật ký đi qua trình duyệt, trình duyệt cũng bị treo). tệp nhật ký có thể được mở bằng cách sử dụng Jupyter).

#!/usr/bin/python 
import time 
import datetime 
import logging 

logger = logging.getLogger() 

def setup_file_logger(log_file): 
    hdlr = logging.FileHandler(log_file) 
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
    hdlr.setFormatter(formatter) 
    logger.addHandler(hdlr) 
    logger.setLevel(logging.INFO) 

def log(message): 
    #outputs to Jupyter console 
    print('{} {}'.format(datetime.datetime.now(), message)) 
    #outputs to file 
    logger.info(message) 

setup_file_logger('out.log') 

for i in range(10000): 
    log('Doing hard work here i=' + str(i)) 
    log('Taking a nap now...') 
    time.sleep(1000) 
11

Cách giải quyết đơn giản nhất để điều này dường như là built-in cell magic%%capture:

%%capture output 
# Time-consuming code here 

Lưu, đóng tab, quay lại sau. Sản lượng hiện đang được lưu trữ trong biến output:

output.show() 

này sẽ hiển thị tất cả tạm print kết quả cũng như các tế bào sản lượng đồng bằng hay giàu.

Các vấn đề liên quan