2010-05-05 23 views
12

Tôi có một vấn đề với mã dưới đây, và với bất kỳ mã mà sử dụng print chức năng trong quá trình đứa trẻ. Tôi không thể thấy bất kỳ câu lệnh in nào, ngay cả khi tôi sử dụng sys.std[err|out].write('worker') thay vì print.quá trình trẻ em tạo ra với mô-đun python đa sẽ không in

Đây là mã (from the official python documentation):

from multiprocessing import Process 

def f(name): 
    print 'hello', name 

if __name__ == '__main__': 
    p = Process(target=f, args=('bob',)) 
    p.start() 
    p.join() 

Đầu ra là trống.

Note: Đoạn mã sau sử dụng mô-đun threading và nó in kết quả:

import threading 

def f(name): 
    print 'hello', name 

if __name__ == '__main__': 
    p = threading.Thread(target=f, args=('bob',)) 
    p.start() 
    p.join() 

Output: hello bob

bạn có thể vui lòng chỉ cho tôi giải pháp? Cảm ơn trước.

Trả lời

19

Hãy thử điều này:

from multiprocessing import Process 
import sys 

def f(name): 
    print 'hello', name 
    sys.stdout.flush() 

... 

AFAIK đầu ra tiêu chuẩn của chế thông thường sinh ra bởi module multiprocessing được đệm, do đó bạn sẽ thấy những kết quả chỉ khi bộ đệm trở nên đầy đủ hoặc bạn một cách rõ ràng tuôn ra sys.stdout.

+0

Thanks a lot Tamas, nhưng điều này trong trường hợp của tôi đã không làm việc ... – John

+0

Những nền tảng là bạn không? Các công trình trên cho tôi trên Mac OS X; trên thực tế, nó hoạt động ngay cả khi không xả sys.stdout. –

+1

Tamas, nền tảng tôi đang làm là win32. Nhân tiện, cho đến bây giờ tôi đã cố gắng chạy mã trong IDLE. Hôm nay tôi đã cố gắng để chạy nó từ dòng lệnh, sử dụng cú pháp sau: python.exe my_prog.py và nó làm việc. Bất kỳ ai cũng biết tại sao? Và làm thế nào tôi có thể hiển thị đầu ra in bằng cách chạy các chương trình trong IDLE? – John

3

Các tài liệu cho đa giải thích rõ ràng why này sẽ không hoạt động!

"Lưu ý: Chức năng trong gói này yêu cầu phương thức __main__ phải được nhập bởi trẻ em. Điều này được đề cập trong Hướng dẫn lập trình tuy nhiên điều này có nghĩa là chỉ ra ở đây. Điều này có nghĩa là một số ví dụ, chẳng hạn như các ví dụ về đa xử lý. không hoạt động trong trình thông dịch tương tác. "

+0

Trước hết là nhờ câu trả lời. Điều tôi đã làm là viết mã trong một tệp có tên là "example.py" và nhấn F5 để chạy nó. Có lẽ điều này có nghĩa là "chạy mã trong IDLE"? PS: Tôi là một newbie python, vì vậy xin lỗi vì bất kỳ (quá) điều rõ ràng tôi có thể nêu ra ở đây. – John

+0

Vâng, IDLE có dấu nhắc ">>" được tính là thông dịch viên tương tác. Vì vậy, đa xử lý về cơ bản sẽ không hoạt động trừ khi bạn viết mã trong một tệp và nhấn F5 khi bạn nói hoặc gõ "python example.py" trong dấu nhắc lệnh. Tôi có thể hiểu làm thế nào điều này có thể là một vấn đề khó hiểu. Không có gì. – manifest

-2

Nhận PyCharm, tôi đã có lỗi tương tự, và làm việc trên đó + -5 giờ. Cuối cùng tôi nhận được Pycharm trên Anaconda và đã nhận được đầu ra. Nó có liên quan đến phiên bản windows của trình thông dịch IPhython.

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