6
Tôi đang cố gắng chạy cProfile.runctx() trên mỗi quy trình trong một nhóm đa xử lý, để biết ý nghĩa của các nút thắt đa xử lý trong nguồn của tôi. Dưới đây là một ví dụ đơn giản về những gì tôi đang cố gắng để làm:Lập hồ sơ đa xử lý python
from multiprocessing import Pool
import cProfile
def square(i):
return i*i
def square_wrapper(i):
cProfile.runctx("result = square(i)",
globals(), locals(), "file_"+str(i))
# NameError happens here - 'result' is not defined.
return result
if __name__ == "__main__":
pool = Pool(8)
results = pool.map_async(square_wrapper, range(15)).get(99999)
print results
Thật không may, cố gắng thực hiện "result = vuông (i)" trong hồ sơ không ảnh hưởng đến 'kết quả' trong phạm vi nó được gọi là từ . Làm thế nào tôi có thể hoàn thành những gì tôi đang cố gắng làm ở đây?
+1; đã làm việc, nhưng có vẻ khá hacky. Bạn có thể giải thích lý do tại sao nó hoạt động không? – Fragsworth
Tôi đoán 'result = square (i)' vừa tạo một tham chiếu mới, trong phạm vi cProfile.runctx (hoặc bất cứ nơi nào nó thực thi mã), để nguyên nguyên cũ. Sử dụng "kết quả toàn cục" trước runctx và "kết quả chung, kết quả = hình vuông (i)" (hoặc "globals() ['result'] = square (i)") bên trong các công trình. –