Tìm hiểu về Đa xử lý trong Python (từ một bài báo PMOTW ) và muốn được giải thích rõ ràng về chính xác join()
phương pháp này đang làm gì.
Trong một hướng dẫn cũ từ năm 2008, nó nói rằng nếu không có lệnh p.join()
gọi trong đoạn mã bên dưới, "tiến trình con sẽ không hoạt động và không kết thúc, trở thành một thây ma bạn phải giết theo cách thủ công".
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
Tôi đã thêm một bản in PID
cũng như một bản in time.sleep
để kiểm tra và theo như tôi có thể nói, quá trình tự kết thúc:
from multiprocessing import Process
import sys
import time
def say_hello(name='world'):
print "Hello, %s" % name
print 'Starting:', p.name, p.pid
sys.stdout.flush()
print 'Exiting :', p.name, p.pid
sys.stdout.flush()
time.sleep(20)
p = Process(target=say_hello)
p.start()
# no p.join()
trong vòng 20 giây:
936 ttys000 0:00.05 /Library/Frameworks/Python.framework/Versions/2.7/Reso
938 ttys000 0:00.00 /Library/Frameworks/Python.framework/Versions/2.7/Reso
947 ttys001 0:00.13 -bash
sau 20 giây:
947 ttys001 0:00.13 -bash
Hành vi giống nhau khi p.join()
được thêm lại vào cuối tệp. Mô-đun Python trong tuần cung cấp giải thích rất dễ đọc về mô-đun ; "Để đợi cho đến khi một quá trình hoàn thành công việc và thoát ra, hãy sử dụng phương thức join ().", Nhưng có vẻ như ít nhất OS X đã làm điều đó.
Tôi cũng đang thắc mắc về tên của phương pháp. Là .join()
phương pháp concatenating bất cứ điều gì ở đây? Nó có nối một quá trình với nó kết thúc không? Hay nó chỉ dùng chung một tên với .join()
phương thức gốc của Python ?
CPU, Memory resources
đang được tách khỏi quy trình mẹ, sau đó được chỉnh sửa join
trở lại sau khi quy trình con đã hoàn thành?