ipython / ipython/ipyparallel

kill engines by pid & client.shutdown blocks

Đang mở
#229 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug
Ngôn ngữ chính
Jupyter Notebook
Star
2.6k
Fork
1k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

Hey @minrk and folks, in Issue #141 you recommend to use os.kill to interrupt engines by pid. I've been trying this approach, however, it seems that when engines are killed by pid you can no longer stop the ipcluster instance using `client.shutdown` without it blocking indefinitely. Is there a better way? I'd like to be able to interrupt all running jobs if, for example, a KeyboardInterrupt is raise, and then still be able to close the ipcluster instance remotely.

Here is an example where I run this first block of code followed by either of the following two code blocks:
```
import ipyparallel as ipp
import signal
import time
import os

## open client view
client = ipp.Client()

## get engines pids
engine_pids = client[:].apply(os.getpid).get_dict()
```

If I interrupt the engines then `shutdown` blocks indefinitely:
```
## submit a job to run for a while
for i in range(4):
async = client[i].apply(time.sleep, 30)

## interrupt each engine job before it finishes
for eng in engine_pids:
os.kill(engine_pids[eng], signal.SIGINT)

## kill the ipcluster instance
client.shutdown(hub=True, block=False)
```

Or if I just try `shutdown` without interrupting engines it doesn't block indefinitely, but it does still block for the full 30 seconds, whether or not I tell it `block=False`.
```
## submit a job to run for a while
for i in range(4):
async = client[i].apply(time.sleep, 30)

## soft shutdown
client.shutdown(hub=True, block=False)
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.