Tôi có ba loại dữ liệu ở các định dạng khác nhau; đối với mỗi loại dữ liệu, có một tập lệnh Python chuyển đổi nó thành một định dạng thống nhất duy nhất.
Tập lệnh Python này bị chậm và bị ràng buộc bởi CPU (với một lõi đơn trên máy đa lõi), vì vậy tôi muốn chạy ba phiên bản của nó - một cho mỗi loại dữ liệu - và kết hợp đầu ra của chúng để chuyển nó vào sort
. Về cơ bản, tương đương với điều này:
{ ./handle_1.py; ./handle_2.py; ./handle_3.py } | sort -n
Nhưng với ba kịch bản chạy song song.
Tôi đã tìm thấy câu hỏi này trong đó GNU split
đã được sử dụng để làm tròn một số luồng đầu ra giữa các phiên bản của tập lệnh xử lý luồng.
Từ trang chia người:
-n, --number=CHUNKS
generate CHUNKS output files. See below
CHUNKS may be:
N split into N files based on size of input
K/N output Kth of N to stdout
l/N split into N files without splitting lines
l/K/N output Kth of N to stdout without splitting lines
r/N like 'l' but use round robin distributio
Vì vậy, r/N
lệnh ngụ ý " không chia dòng ".
Dựa trên điều này, có vẻ như giải pháp sau đây là khả thi:
split -n r/3 -u --filter="./choose_script" << EOF
> 1
> 2
> 3
> EOF
Trường hợp choose_script
này
#!/bin/bash
{ read x; ./handle_$x.py; }
Thật không may, tôi thấy một số dòng xen kẽ - và rất nhiều dòng mới không nên có.
Ví dụ: nếu tôi thay thế các tập lệnh Python của mình bằng một số tập lệnh bash đơn giản thực hiện việc này:
#!/bin/bash
# ./handle_1.sh
while true; echo "1-$RANDOM"; done;
.
#!/bin/bash
# ./handle_2.sh
while true; echo "2-$RANDOM"; done;
.
#!/bin/bash
# ./handle_3.sh
while true; echo "3-$RANDOM"; done;
Tôi thấy đầu ra này:
1-8394
2-11238
2-22757
1-723
2-6669
3-3690
2-892
2-312511-24152
2-9317
3-5981
Điều này thật khó chịu - dựa trên trích xuất trang người đàn ông tôi đã dán ở trên, nó sẽ duy trì tính toàn vẹn của dòng.
Rõ ràng là nó hoạt động nếu tôi loại bỏ -u
đối số, nhưng sau đó nó được đệm và tôi sẽ hết bộ nhớ vì nó đệm đầu ra của tất cả trừ một trong các tập lệnh.
Nếu bất cứ ai có cái nhìn sâu sắc ở đây, nó sẽ được đánh giá rất cao. Tôi ra khỏi chiều sâu của tôi ở đây.
job1.py > file1 & job2.py > file 2 & job3.py > file3 ; wait ; sort -n file1 file2 file3
?
coproc
nội trang trong bash, mặc dù tôi không thực sự thấy nó được áp dụng như thế nào.