Tôi đang cố gắng để viết các bài kiểm tra với nose được thiết lập với một cái gì đó được tính toán bằng cách xử lý đa.thử nghiệm python đa xử lý mã hồ bơi với mũi
Tôi có cấu trúc này thư mục:
code/
tests/
tests.py
tests.py trông như thế này:
import multiprocessing as mp
def f(i):
return i ** 2
pool = mp.Pool()
out = pool.map(f, range(10))
def test_pool():
"""Really simple test that relies on the output of pool.map.
The actual tests are much more complicated, but this is all
that is needed to produce the problem."""
ref_out = map(f, range(10))
assert out == ref_out
if __name__ == '__main__':
test_pool()
Chạy từ thư mục code
, python tests/tests.py
đi.
nosetests tests/tests.py
không thành công để hoàn tất. Nó bắt đầu lên, nhưng không bao giờ được thông qua các cuộc gọi đến pool.map
và chỉ bị treo.
Tại sao điều này và giải pháp đơn giản nhất là gì?
Có thể là 'nose' đang sử dụng một số luồng và/hoặc đăng nhập khi chạy kiểm tra. Điều này * có thể * dẫn đến deadlocks khi trộn với multiprocessing trên hệ thống UNIX. Đây không phải là một vấn đề với việc thực hiện python nhưng với chính hàm 'fork()', chỉ làm cho nhánh hiện tại, xem [this] (http://stackoverflow.com/questions/6078712/is-it-safe-to -fork-from-in-a-thread/6079669 # 6079669) trả lời cho một lời giải thích chi tiết hơn. – Bakuriu
Tôi tin rằng giải pháp duy nhất (?) Sẽ là giả lập mô đun 'đa xử lý '. Trong thực tế, tôi không thấy những gì ví dụ của bạn đang thử nghiệm. Nó thực sự là một unittest cho phương thức 'multiprocessing.Pool.map', chứ không phải cho hàm' f'! – Bakuriu
Đây là ví dụ tối thiểu tái tạo lỗi của tôi. Tôi đang thử nghiệm một tải các công cụ khác sử dụng kết quả của 'pool.map' làm đầu vào. – aaren