Chúng tôi có một thư mục với 50 datafiles (chuỗi DNA thế hệ tiếp theo) cần được chuyển đổi bằng cách chạy tập lệnh python trên mỗi tệp. Kịch bản mất 5 giờ cho mỗi tập tin và nó là đơn luồng và phần lớn là CPU bị ràng buộc (lõi CPU chạy ở 99% với IO đĩa tối thiểu).Chạy 4 trường hợp đồng thời của một tập lệnh python trên một thư mục của các tệp dữ liệu
Vì tôi có một máy 4 lõi, tôi muốn chạy 4 phiên bản của tập lệnh này cùng một lúc để tăng tốc quá trình.
Tôi đoán tôi có thể chia dữ liệu thành 4 thư mục và chạy các script bash sau trên mỗi thư mục cùng một lúc:
files=`ls -1 *`
for $file in $files;
do
out = $file+=".out"
python fastq_groom.py $file $out
done
Nhưng có phải là một cách tốt hơn để chạy nó trên một thư mục . Chúng ta có thể sử dụng Bash/Python/Perl/Windows để làm điều này.
(Đáng buồn làm cho kịch bản đa luồng là xa hơn những gì chúng ta có thể làm)
Sử dụng @phs xargs giải pháp được cách dễ nhất để chúng ta giải quyết vấn đề. Tuy nhiên, chúng tôi yêu cầu nhà phát triển ban đầu triển khai câu trả lời @ Björn. Một lần nữa cảm ơn!
Việc sử dụng của 'ls' trong backticks, và gán giá trị cho một biến để khởi động, là một antipattern thường xuyên. Nó sẽ phá vỡ trên tên tập tin với không gian, và nó sẽ phá vỡ nếu bạn có thư mục con. Thành ngữ chính xác là 'cho tệp trong *' - cũng lưu ý sự vắng mặt của một ký hiệu đô la khi đặt tên một biến; bạn sử dụng ký hiệu đô la khi nội suy một biến. Xem thêm http://partmaps.org/era/unix/award.html#ls – tripleee
@triplee Cảm ơn bạn đã tip –