এই পাইথন প্রোগ্রামের জন্য আমি কীভাবে সিপিইউ ব্যবহার কমিয়ে আনতে পারি?


15

আমি কিছুক্ষণের লুপে 24/7 ধরে পাইথন রান করব, এখানে প্রোগ্রামের সাজানোর উদাহরণ রয়েছে:

while True:

    print ("me again...")

তবে আমি যখন এটি চালাই, আমার সিপিইউ 100% এ যায়! তবে আমি চাই না যেহেতু আমার প্রোগ্রামটি দীর্ঘ সময় ইত্যাদির জন্য চলবে এবং আমি চাই না যে আমার সিপিইউ খুব গরম হবে, তাই কি আমি কি এটিকে আটকাতে পারি?


3
অপেক্ষা না করে সিপিইউ 100% যায় কারণ আপনি এটি করতে বলেছিলেন :) আপনি যতটা সম্ভব প্রিন্ট করুন print সুতরাং অপেক্ষা এই বোঝাটি লোড করতে সহায়তা করবে। মুদ্রণ, সাধারণত একটি খুব ব্যয়বহুল অপারেশন। একটি ফাইল লিখিত অনেক সস্তা।
পাইওটার কুলা

আপনাকে অপারেটিং সিস্টেমটি বলতে হবে যে আপনি একটি নির্দিষ্ট সময়ের জন্য কোনও সিপিইউ চক্র চান না, অন্যথায় আপনি যা দেখছেন তা এড়াতে আপনি কিছু করতে পারবেন না।
থোরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


16

আপনার লুপ শেষে একটি আছে

time.sleep(xx)সেকেন্ডের জন্য, বা time.sleep(x.x)আংশিক সেকেন্ড উপস্থাপন করতে

(দয়া করে লাইব্রেরির সময়টি আমদানি করতে মনে রাখবেন import time:)

আপনার প্রোগ্রামকে বিরূপ প্রভাবিত না করে xx যতটা সম্ভব উঁচুতে থাকার সাথে। এই মুহুর্তে আপনার প্রোগ্রামটি পাইকে বিশ্রাম দেওয়ার বা অন্য কিছু করার জন্য কিছুটা সময় দেওয়ার পরিবর্তে সবসময় যতটা সম্ভব দ্রুত কাজ করে চলেছে।


হুমমম ... খুব আকর্ষণীয় ... আমি চেষ্টা করে দেখব। ধন্যবাদ! বিশ্বাস করতে পারি না আমি তা ভেবে দেখিনি!
ব্যবহারকারী 151324

আমার কি লাইব্রেরি আমদানি করা উচিত, ইত্যাদি?
সময়টি

@ কোডিং_কর্জি হ্যাঁ, আপনার জন্য সময় গ্রন্থাগার দরকার।
বাটারস

2
তাহলে import time?
ব্যবহারকারী 151324

@coding_corgi। হ্যাঁ এটা ঠিক.
বাটারস

14

মুখবন্ধ

আপনার কাজটি বারবার চালানো দরকার তা নিশ্চিত হন। একে ব্যস্ত ওয়েটিং এবং প্রায় সর্বদা সাবটটিমাল বলা হয়। যদি আপনার কাজটি একটি সাবপ্রসেসের আউটপুট অনুসন্ধান করছে, উদাহরণস্বরূপ, আপনি কেবল subprocess.wait()এটি শেষ করার জন্য করতে পারেন । যদি আপনার কাজটি ফাইল সিস্টেমের কোনও ফাইল বা ডিরেক্টরিটির স্পর্শ হওয়ার জন্য অপেক্ষা করে থাকে, আপনি কার্নেল দ্বারা পরিচালিত ফাইল সিস্টেম ইভেন্ট থেকে আপনার কোডটি ট্রিগার করার জন্য পাইনোটাইফাই ব্যবহার করতে পারেন ।

উত্তর

এইভাবে আপনি অত্যধিক সিপিইউ না খেয়ে ব্যস্ততার জন্য অসীম লুপটি লেখেন।

পাইথন 2:

from __future__ import print_function
from __future__ import division

import time

while True:
    range(10000)       # some payload code
    print("Me again")  # some console logging
    time.sleep(0.2)    # sane sleep time of 0.1 seconds

পাইথন 3:

import time

while True:
    range(10000)       # some payload code
    print("Me again")  # some console logging
    time.sleep(0.2)    # sane sleep time of 0.1 seconds

মূল্যায়ন

@Gnibbler যেমন অন্য উত্তরে পরীক্ষা করা হয়েছে , উপস্থাপিত কোডটি সাম্প্রতিক মেশিনগুলিতে 1% এর বেশি সিপিইউ গ্রহণ করা উচিত নয়। যদি এটি এখনও আপনার পেডলোড কোডের সাথে খুব বেশি সিপিইউ গ্রহণ করে তবে আরও ঘুমানোর জন্য সময় বাড়ানোর কথা বিবেচনা করুন। অন্যদিকে, পে-লোড কোডটি বারবার সম্পাদনের জন্য অনুকূলিত হওয়া প্রয়োজন। উদাহরণস্বরূপ, ক্যাচিং অপরিবর্তিত ডেটাতে চলমান গতি বাড়িয়ে তুলতে পারে।

ক্রেডিট

এই উত্তরটি @ user2301728 এর উত্তরের ভিত্তিতে তৈরির চেষ্টা করে ।


3

আমার একই সমস্যা ছিল, স্ট্যাক এক্সচেঞ্জে আমার প্রশ্নটি দেখুন । সমাধানটি ছিল time.sleep(0.01)এবং এর সংমিশ্রণ niceniceকোনও অ্যাপ্লিকেশনে উপলব্ধ সিপিইউ হ্রাস করে। এইভাবেই আমি অ্যাপটি শুরু করি : nice -n 19.


1

আপনি চেষ্টা করতে পারেন nice -n 19 python myscript.py

চমৎকার একটি টাস্ক CPU- র অগ্রাধিকার সেট করতে একটি * স্নো ইউটিলিটি। 19 হ'ল বৃহত্তম ওজন এবং ফলস্বরূপ ধীরতম সেটিং।


2
কোনও প্রক্রিয়াটির কৌতূহল উত্থাপন কেবলমাত্র অন্যান্য প্রক্রিয়াগুলিকে প্রায়শই সিপিইউগুলি পেতে সক্ষম করে। অন্য কোনও প্রক্রিয়া নেই যে কোনও মুহুর্তে, ওপির কোডগুলি এখনও 100% সিপিইউ ব্যবহার করবে এবং যদি তা থাকে তবে তারা সিপিইউ ব্যবহার করবে, আবার মোট 100% হবে।
বেংট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.