2016-11-21 17 views
6

Tôi có một chương trình tạo ra rất nhiều (terabyte) đầu ra và gửi nó tới chế độ xuất chuẩn.Chia nhỏ văn bản và quy trình song song

Tôi muốn tách đầu ra đó và xử lý nó song song với một loạt các phiên bản của một chương trình khác. Nó có thể được phân phối theo bất kỳ cách nào, miễn là các dòng còn nguyên vẹn.

Parallel thể làm điều này, nhưng phải mất một số cố định của đường dây và restartes quá trình lọc sau này:

./relgen | parallel -l 100000 -j 32 --spreadstdin ./filter 

Có cách nào để giữ một số liên tục của tiến trình đang chạy và phân phối dữ liệu trong số đó?

Trả lời

2

-l không tốt cho hiệu suất. Sử dụng --block để thay thế nếu có thể.

Bạn có thể có vòng xoay dữ liệu được phân phối với: --roundrobin.

./relgen | parallel --block 3M --round-robin -j 32 --pipe ./filter 
+0

Sử dụng lệnh này, quy trình lọc được sinh ra, nhưng chỉ có một quy trình đang chạy cùng một lúc. Những người khác đang chờ đợi đầu vào. – Craden

+0

Sau đó, relgen tạo ra quá chậm: Thấp hơn 3M đến 0,3M –

+0

relgen đang tạo đủ nhanh để giữ cho tất cả 32 trường hợp bộ lọc đang chạy. Vẫn còn hành vi tương tự với 0.3M. – Craden

Các vấn đề liên quan