Khi chạy một số lượng lớn các tác vụ (với các tham số lớn) bằng cách sử dụng Pool.apply_async, các tiến trình được cấp phát và chuyển sang trạng thái chờ, và không có giới hạn về số lượng quy trình chờ. Điều này có thể kết thúc bằng cách ăn tất cả bộ nhớ, như trong ví dụ bên dưới:Đa xử lý Python: làm cách nào để giới hạn số lượng quy trình chờ?
import multiprocessing
import numpy as np
def f(a,b):
return np.linalg.solve(a,b)
def test():
p = multiprocessing.Pool()
for _ in range(1000):
p.apply_async(f, (np.random.rand(1000,1000),np.random.rand(1000)))
p.close()
p.join()
if __name__ == '__main__':
test()
Tôi đang tìm cách giới hạn hàng chờ, theo cách chỉ có một số lượng giới hạn chờ đợi, và Pool.apply_async bị chặn trong khi hàng chờ đợi đã đầy.
Ví dụ hay (+1). – mgilson