2008-12-14 32 views
13

Tôi gặp sự cố với mô-đun đa xử lý Python. Tôi đang sử dụng lớp Process để sinh ra một quy trình mới để sử dụng lõi thứ hai của tôi. Quá trình thứ hai này tải một loạt dữ liệu vào RAM và sau đó chờ đợi kiên nhẫn thay vì tiêu thụ.Không có đầu ra in từ đa xử lý con. Xử lý trừ khi chương trình gặp sự cố

Tôi muốn xem quy trình đó được in bằng lệnh print, tuy nhiên, tôi không thấy bất kỳ nội dung nào được in. Tôi chỉ thấy những gì quá trình cha mẹ in. Điều này có ý nghĩa với tôi vì họ sống trong hai quá trình khác nhau. Quá trình thứ hai không sinh ra cửa sổ đầu ra shell/standard của riêng nó, cũng không phải là đầu ra của nó được gửi tới cha/mẹ. Tuy nhiên, khi quá trình này sụp đổ, nó in tất cả mọi thứ mà kịch bản của tôi nói với nó để in, cộng với dấu vết ngăn xếp và lỗi.

Tôi tự hỏi nếu có một cách đơn giản để gửi đầu ra in của tiến trình con cho quá trình đầu tiên, hoặc có nó đẻ ra một vỏ/đầu ra tiêu chuẩn để tôi có thể gỡ lỗi nó. Tôi biết tôi có thể tạo ra một multiprocessing.Queue dành riêng cho truyền các bản in cho phụ huynh để nó có thể in chúng ra đầu ra tiêu chuẩn, nhưng tôi không cảm thấy muốn làm điều này nếu một giải pháp đơn giản tồn tại.

Trả lời

23

Bạn đã thử xóa quảng cáo chưa?

import sys 
print "foo" 
sys.stdout.flush() 
+0

tuyệt vời! Vâng, điều đó thực sự hiệu quả. Điều này sys.stdout.flush() làm gì? Nó có ép buộc các bản in rõ ràng không? Thx lần nữa! –

+1

Nó xóa bộ đệm. Stdout được lưu cho đến khi bạn có bộ đệm đầy đủ. Flush ngừng chờ đợi. Hãy thử in để stderr để xem những gì nó làm. Đôi khi nó là unbuffered. –

+0

@ Nicholas: không có vấn đề :) Khi chạy các quy trình con, đầu ra tiêu chuẩn của chúng thường được đệm (và lỗi chuẩn của chúng thường không phải là), S.Lott giải thích điều đó có nghĩa là gì. Bạn có thể thử các thủ thuật khác nhau để ngăn chặn đệm, nhưng việc nhớ sử dụng sys.stdout.flush() rất đơn giản và luôn hoạt động. – orip

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