2010-09-10 32 views
11

Tôi đang sử dụng mô-đun đa xử lý để thực hiện xử lý song song trong chương trình của mình. Khi tôi thử nghiệm nó, tôi thường muốn giết chương trình sớm khi tôi nhận thấy một lỗi, vì phải mất một lúc để chạy đến khi hoàn thành. Trong môi trường Linux của tôi, tôi chạy chương trình của tôi từ một thiết bị đầu cuối, và sử dụng Ctrl + C để giết nó. Với đa xử lý, điều này làm cho tất cả các quá trình bị giết, nhưng tôi không bao giờ nhận được dấu nhắc lại, và phải đóng terminal và mở một terminal mới (và điều hướng trở lại thư mục làm việc của tôi), điều này khá khó chịu. Có cách nào để làm được việc này?Giết chương trình bằng cách sử dụng đa xử lý

+0

Bạn có thể vui lòng cung cấp mẫu về những gì bạn đang cố gắng đạt được không? – hyperboreean

+0

Xem chủ đề này: http://stackoverflow.com/questions/1408356/keyboard-interrupts-with-pythons-multiprocessing-pool – wchung

Trả lời

21

Hit Ctrl-Z để tạm dừng quá trình Python, sau đó làm kill %1 để giết nó. Bạn cũng có thể chỉ cần nhấn Ctrl- \ (dấu gạch chéo ngược), nhưng điều đó có thể khiến quá trình rời khỏi tệp lõi.

+2

+1: Đôi khi với các chương trình đa luồng/đa xử lý bạn phải 'kill -9% 1' xấu con trai. – jathanism

0

Bạn có thể sử dụng màn hình để bắt đầu quá trình, sau đó giết phiên màn hình khi bạn cần. Nó sẽ không đưa ra toàn bộ thiết bị đầu cuối bash. Để xem hướng dẫn màn hình tốt xem:

http://www.kuro5hin.org/story/2004/3/9/16838/14935

2

Nhưng chờ ... không có cách nào để xử lý sự kiện KeyboardException để giết các quá trình trong nhóm?

tôi đã cố gắng:

except KeyboardInterrupt as e: # Ctrl-C 
    print("Killing all the children in the pool.") 
    pool.close() 
    pool.terminate() 
    return 1 
    # raise e 

Nhưng nó dường như không làm việc.

+3

Tôi rất muốn tìm hiểu cách thực hiện công việc này. –

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