
Xử lý hàng loạt song song bằng nhiều phiên run_journal: chia thư mục thành lô và chạy đồng thời
#Hàng loạt#Hiệu năng#run_journal1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Một phiên NX xử lý tuần tự; có máy mạnh và đủ giấy phép bạn có thể chạy nhiều run_journal cùng lúc, mỗi phiên một lô file. Script điều phối chạy bằng Python hệ thống, không phải trong NX.
Xử lý hàng loạt song song bằng nhiều phiên…Chuẩn bị
- Đủ số giấy phép NX cho số phiên chạy đồng thời.
- Script xử lý một lô nhận danh sách file qua tham số dòng lệnh hoặc file danh sách.
Các bước thực hiện
- Liệt kê file. Quét thư mục .prt.
- Chia lô. Chia đều thành N lô.
- Ghi danh sách mỗi lô. File văn bản mỗi dòng một đường dẫn.
- Chạy song song. subprocess.Popen cho mỗi lô.
- Thu kết quả. Chờ tất cả xong, đọc mã thoát.
Code tham khảo (Python)
# dieu_phoi.py - chạy bằng Python hệ thống, KHÔNG chạy trong NX import os import subprocess import sys import tempfile RUN_JOURNAL = r"C:\Program Files\Siemens\NX 12.0\NXBIN\run_journal.exe" SCRIPT_LO = r"D:\NXLab\scripts\xu_ly_mot_lo.py" SO_PHIEN = 3 def liet_ke_prt(thu_muc): ds = [] for goc, _, files in os.walk(thu_muc): ds += [os.path.join(goc, f) for f in files if f.lower().endswith(".prt")] return sorted(ds) def chia_lo(ds, n): return [ds[i::n] for i in range(n) if ds[i::n]] def main(thu_muc): ds = liet_ke_prt(thu_muc) print("Tìm thấy %d file" % len(ds)) thu_muc_tam = tempfile.mkdtemp(prefix="nxlab_lo_") tien_trinh = [] for i, lo in enumerate(chia_lo(ds, SO_PHIEN), 1): file_ds = os.path.join(thu_muc_tam, "lo_%d.txt" % i) with open(file_ds, "w", encoding="utf-8") as f: f.write("\n".join(lo)) # Truyền đường dẫn file danh sách cho script bằng -args lenh = [RUN_JOURNAL, SCRIPT_LO, "-args", file_ds] tien_trinh.append((i, subprocess.Popen(lenh))) ma_thoat = [(i, p.wait()) for i, p in tien_trinh] for i, ma in ma_thoat: print("Lô %d kết thúc, mã thoát %d" % (i, ma)) return 0 if all(m == 0 for _, m in ma_thoat) else 1 if __name__ == "__main__": sys.exit(main(sys.argv[1] if len(sys.argv) > 1 else r"D:\Du_an\ban_ve"))Giải thích code
ds[i::n]lấy mỗi phần tử thứ n bắt đầu từ i, chia đều các file cho n lô theo kiểu vòng tròn.- Tham số sau
-argsđược script chạy trong NX đọc quasys.argv. Popenkhởi chạy không chặn, nên các lô chạy đồng thời;wait()ở cuối chờ tất cả.
Lỗi thường gặp
- Mỗi phiên
run_journalchiếm một giấy phép; chạy quá số cho phép làm các phiên sau lỗi hoặc chờ. - Nhiều phiên ghi cùng một file log/CSV sẽ chồng chéo; mỗi lô ghi file riêng rồi gộp sau.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.