রিসোর্স বন্ধুত্বপূর্ণ উপায় ব্যবহারকারী প্রোগ্রামে নির্দেশ করার উপায় ঝুলছে না


10

আমার কাছে একটি * নিক্স সিস্টেমে পার্ল স্ক্রিপ্ট রয়েছে যা এক পর্যায়ে 50,000+ লাইনের পাঠ্য প্রক্রিয়াকরণ করছে। এটি কিছুটা সময় নেয়। আমি এই উত্সটি সমস্তটি প্রক্রিয়াকরণ করার সময় প্রোগ্রামটি হ্যাং হচ্ছে না তা ব্যবহারকারীদের জানাতে একটি সংস্থানবান্ধব উপায় সন্ধান করার চেষ্টা করছি।

পাঠ্যটি প্রক্রিয়াজাত হওয়ায় বর্তমানে আমি রিয়েলটাইমে আউটপুট মুদ্রণ করছি। আমি আউটপুট বাফারটি ফ্লাশ করছি তারপরে একটি লাইনে আউটপুট প্রিন্ট করব \r। এটি সম্পদের অপ্রয়োজনীয় ব্যবহার বলে মনে হচ্ছে কারণ আমি কিছুই না ছাপানোর চেয়ে প্রায় দ্বিগুণ সময় নেয় তবে আমি যেমন বলেছি, কিছুই মুদ্রণ করার সময় মনে হয় প্রোগ্রামটি ঝুলছে।

সুতরাং আমার প্রশ্ন: দীর্ঘ চলমান কাজগুলি সম্পাদন করার সময় ব্যবহারকারীকে প্রোগ্রামটি সত্যিই চলছে কিনা তা জানার কোনও স্ট্যান্ডার্ড বা সহজ উপায় আছে?


কোন ইউনিক্স? এটি যদি ফ্রিবিএসডি হয় তবে আপনি নিয়ন্ত্রণ-টি প্রেরণ করে এটি এখনও ব্যস্ত কিনা তা পরীক্ষা করতে পারেন (এটি ডিফল্ট স্ট্যাটাস কমান্ড যা) is
হেনেস

উত্তর:


6

[আমি বুঝতে পেরেছি যে আপনার স্ক্রিপ্টটি পার্ল , তবে একই যুক্তিটি প্রযোজ্য print "\r", ইত্যাদি) আপনি ব্যবহার করতে STDERRবা অন্যথায় বাফারিং বন্ধ করতে চাইবেন $| = 1,। নীচে দেখুন।]

সিএলআই "প্রগতি সূচক" প্রয়োগের একটি উপায় \r(ক্যারেজ রিটার্ন) অক্ষর ব্যবহারের সাথে জড়িত । এটি কার্সারটিকে বর্তমান লাইনের শুরুতে নিয়ে আসে:

#!/bin/bash

count=0
while ((1)); do
    echo -ne "\rCount: $count"
    sleep 1;
    count=$(($count+1));
done     

এটি যদি অর্থবোধ না করে তবে এটি চেষ্টা করে দেখুন।

আপনি এখন পর্যন্ত কতগুলি লাইন বা হাজার হাজার লাইন প্রক্রিয়াভুক্ত হয়েছে তা নির্দেশ করতে সেই কৌশলটি ব্যবহার করতে পারেন। দশক বা শত শত লাইন ভাল হতে পারে কারণ এটি প্রায়শই হয় না (আরও আপডেটগুলি == ধীর রানটাইম) তবে সম্ভবত এখনও প্রায়শই প্রগতি দেখানোর জন্য পর্যাপ্ত অব্যাহত রয়েছে। আপনি একটি ইউনিট নির্দিষ্ট করতে পারেন বা কেবল শূন্য যুক্ত করতে পারেন।

এর ব্যবহারটি -nএবং এর -eসাথে লক্ষ করুন echo, এটি গুরুত্বপূর্ণ।

আপনি \bঅনুরূপ প্রভাব (ব্যাকস্পেস) ব্যবহার করতে পারেন ।


পার্ল ইন:

#!/usr/bin/perl
use strict;
use warnings FATAL => qw(all);

$| = 1;  # Pipeline stdout (i.e., no buffering).

my $count = 1;
while ($count) {
    print "\rCount $count";
    sleep 1;
    $count++;
}               

3

.প্রসেস করার সাথে সাথে একটি নতুন লাইন প্রতিধ্বনিত না করে একটি একক মুদ্রণ করুন । বয়স পুরানো কৌশল।

সুতরাং আপনি পাবেন:

Processing...............

সহজ এবং কার্যকর।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.