Tôi quan sát hành vi này khi cố tạo các quy trình con lồng nhau trong Python. Dưới đây là chương trình cha mẹ parent_process.py
:Tạo các tiến trình con bên trong một tiến trình con với sự đa xử lý Python không thành công
import multiprocessing
import child_process
pool = multiprocessing.Pool(processes=4)
for i in range(4):
pool.apply_async(child_process.run,())
pool.close()
pool.join()
Chương trình cha mẹ gọi là "chạy" chức năng trong chương trình con child_process.py sau:
import multiprocessing
def run():
pool = multiprocessing.Pool(processes=4)
print 'TEST!'
pool.close()
pool.join()
Khi tôi chạy chương trình cha mẹ, không có gì được in ra và chương trình đã thoát nhanh. Tuy nhiên, nếu print 'TEST!'
được di chuyển một dòng ở trên (trước khi các quy trình con lồng nhau được tạo), 'TEST!'
được in 4 lần.
Vì lỗi trong quá trình con sẽ không in ra màn hình, điều này dường như cho thấy chương trình bị treo khi quá trình con tạo quy trình con lồng nhau của riêng nó.
Có ai có thể giải thích điều gì xảy ra sau hậu trường không? Cảm ơn!
Tôi biết có giới hạn trong việc lồng làm tăng Ngoại trừ ion, nhưng bạn ở xa nó trong trường hợp này. Tôi nghĩ vấn đề ở một nơi khác, có thể trong cơ chế 'hồ bơi' ... – CoMartel
Bạn đang cố gắng cải thiện điều gì với điều này? Bạn sẽ không nhanh hơn bằng cách khởi chạy các pool 'Pool' hơn là khởi chạy' Pool' – CoMartel
@HarryPotfleur lớn hơn. Mục đích là để cho mỗi tiến trình con quản lý bộ quy trình riêng của nó, vì vậy chương trình trông sạch hơn về mặt logic. Nói rằng tôi có 16 lõi, sau đó các quy trình lồng nhau 4x4 có thể chạy đồng thời. Tôi cung cấp một giải pháp thay thế bên dưới. –