আমি এটিকে ভাসমান পয়েন্ট নম্বর দিতে পারি
time.sleep(0.5)
তবে এটি কতটা সঠিক? যদি দিই তো
time.sleep(0.05)
এটি কি সত্যিই প্রায় 50 এমএস ঘুমাবে?
উত্তর:
সময় কার্যকারিতা.স্লিপ ফাংশন আপনার অন্তর্নিহিত ওএসের ঘুমের নির্ভুলতার উপর নির্ভর করে। স্টক উইন্ডোজের মতো নন-রিয়েলটাইম ওএসের জন্য আপনি সবচেয়ে ছোট ব্যবধানের জন্য ঘুমাতে পারেন 10-10 মাইল। আমি ন্যূনতম 10-13 মিমি থেকে উপরে তখনকার বেশ কয়েকটি মিলিসেকেন্ডের মধ্যে সঠিক ঘুম দেখেছি।
আপডেট: নীচে উদ্ধৃত দস্তাবেজে যেমন উল্লেখ করা হয়েছে, এমন একটি লুপে ঘুমানো সাধারণ বিষয় যা আপনাকে ঘুম থেকে ওঠার আগে ঘুমাতে ফিরে যেতে নিশ্চিত করবে।
আমার আরও উল্লেখ করা উচিত যে আপনি যদি উবুন্টু চালাচ্ছেন তবে আপনি আরটি কার্নেল প্যাকেজটি ইনস্টল করে (কমপক্ষে উবুন্টু 10.04 এলটিএসে) সিউডো রিয়েল-টাইম কার্নেলটি ব্যবহার করতে পারেন (RT_PREEMPT প্যাচ সেট সহ)।
সম্পাদনা: সংশোধন-অ-রিয়েলটাইম লিনাক্স কার্নেলগুলিতে ন্যূনতম ঘুমের ব্যবধান 1 মিমি 10 মাইলের খুব কাছাকাছি থাকলেও এটি অ-নিরস্তকরণ পদ্ধতিতে পরিবর্তিত হয়।
sleep()
ডকস থেকে আরও গুরুত্বপূর্ণ কিছু করতে ব্যস্ত থাকলে তারা " করণীয় নির্ধারিত সময়ের কারণে একটি স্বেচ্ছাসেবী পরিমাণ দ্বারা অনুরোধ করা থেকে স্থগিতাদেশ দীর্ঘ হতে পারে সিস্টেমের অন্যান্য ক্রিয়াকলাপ "।
অপারেটিং সিস্টেম এবং কার্নেলের মধ্যে পার্থক্য সম্পর্কে লোকেরা বেশ সঠিক, তবে আমি উবুন্টুতে কোনও গ্রানুলারিটি দেখতে পাচ্ছি না এবং আমি এমএস 7 তে 1 এমএস গ্রানুলারিটি দেখতে পাচ্ছি। সময় ভিন্নরূপে প্রয়োগের পরামর্শ দিচ্ছে leep ঘুম, কেবল আলাদা টিকের হার নয়। কাছাকাছি পরিদর্শনটি উবুন্টুতে 1 gran গ্রানুলারিটির প্রস্তাব দেয় তবে এটি যথাযথতা পরিমাপ করার জন্য আমি যে সময়-সময় কাজের জন্য ব্যবহার করি তার কারণেই।
ডকুমেন্টেশন থেকে :
অন্যদিকে, তাদের ইউনিক্স সমতুল্যের তুলনায় যথার্থতা
time()
এবংsleep()
ভাল: সময়গুলি ভাসমান পয়েন্ট সংখ্যা হিসাবে প্রকাশ করা হয়,time()
সর্বাধিক সঠিক সময়টি উপলব্ধ হয় (gettimeofday
যেখানে ইউনিক্স উপলব্ধ থাকে সেখানে ব্যবহার করা হয় ) এবংsleep()
ননজারো ভগ্নাংশের সাথে একটি সময় গ্রহণ করবে (ইউনিক্সselect
ব্যবহৃত হয় এটি কার্যকর করার জন্য, যেখানে উপলব্ধ)।
এবং আরও নির্দিষ্টভাবে কব্জি sleep()
:
প্রদত্ত সেকেন্ডের জন্য কার্যকর করা স্থগিত করুন। আরও সঠিক ঘুমের সময় নির্দেশ করতে যুক্তিটি একটি ভাসমান পয়েন্ট নম্বর হতে পারে। প্রকৃত সাসপেনশন সময়টি অনুরোধ করা চেয়ে কম হতে পারে কারণ কোনও ধরা সংকেত
sleep()
সেই সংকেতের ধরার রুটিনের নিম্নলিখিত ক্রিয়াকলাপটি সমাপ্ত করে । এছাড়াও, সিস্টেমে অন্যান্য ক্রিয়াকলাপের সময়সূচী নির্ধারণের কারণে স্বেচ্ছাসেবী সময়টি একটি স্বেচ্ছাসেবী পরিমাণ দ্বারা অনুরোধ করা বেশি দীর্ঘ হতে পারে ।
উইলবার্টের উত্তরের জন্য এখানে আমার ফলোআপ: ম্যাক ওএস এক্স ইয়োসেমাইটের জন্য একই, কারণ এটি এখনও খুব বেশি উল্লেখ করা হয়নি।
দেখে মনে হচ্ছে যে আপনি যে সময়টি অনুরোধ করেছেন তার চেয়ে প্রায় 1.25 বার বেশি সময় ঘুমায় এবং কখনও কখনও আপনি অনুরোধের সময় 1 এবং 1.25 বারের মধ্যে ঘুমায়। এটি প্রায় কখনই নয় (1000 টি নমুনার মধ্যে দ্বিগুণ) আপনার অনুরোধ করা সময়ের চেয়ে 1.25 গুণ বেশি ঘুমায়।
এছাড়াও (স্পষ্টরূপে দেখানো হয়নি) আপনি প্রায় 0.2 এমএস এর নীচে না আসা পর্যন্ত 1.25 সম্পর্কটি বেশ ভালভাবে ধরেছে বলে মনে হচ্ছে, এরপরে এটি কিছুটা अस्पष्ट হওয়া শুরু করবে। অতিরিক্তভাবে, অনুরোধ করা সময়ের পরিমাণ 20 এমএসের বেশি হওয়ার পরে আপনার অনুরোধের চেয়ে আসল সময়টি প্রায় 5 এমএস দীর্ঘ স্থায়ী হয়ে যায় বলে মনে হয়।
আবার এটি sleep()
উইন্ডোজ বা যে কোনও লিনাক্স কার্নাল উইলবার্ট ব্যবহার করছিল তার তুলনায় ওএস এক্সের ক্ষেত্রে সম্পূর্ণ আলাদা বাস্তবায়ন বলে মনে হচ্ছে ।
আপনি কেন খুঁজে পাবেন না:
from datetime import datetime
import time
def check_sleep(amount):
start = datetime.now()
time.sleep(amount)
end = datetime.now()
delta = end-start
return delta.seconds + delta.microseconds/1000000.
error = sum(abs(check_sleep(0.050)-0.050) for i in xrange(100))*10
print "Average error is %0.2fms" % error
রেকর্ডটির জন্য, আমি আমার এইচটিপিসিতে প্রায় 0.1 মিমি ত্রুটি এবং আমার ল্যাপটপে 2 এমএস, দুটি লিনাক্স মেশিনই পেয়েছি।
একটি ছোট সংশোধন, বেশিরভাগ লোক উল্লেখ করেছেন যে ঘুম খুব শীঘ্রই একটি সংকেত দ্বারা শেষ করা যেতে পারে। ইন 3.6 ডক্স এটা বলছেন,
৩.৫ সংস্করণে পরিবর্তিত হয়েছে: সিগন্যালের মাধ্যমে ঘুম ব্যাহত হলেও ফাংশনটি এখন কমপক্ষে সেকেন্ডে ঘুমায়, সিগন্যাল হ্যান্ডলার ব্যতিক্রম উত্থাপন ব্যতীত ( যুক্তির জন্য পিইপি 475 দেখুন )।
আপনি ঘুম সম্পর্কে সত্যিই কোনও গ্যারান্টি দিতে পারবেন না, কেবলমাত্র যতক্ষণ আপনি এটি বলেছেন ততক্ষণ ঘুমের সর্বোত্তম চেষ্টা করবে (সংকেতগুলি আপনার ঘুমকে মেরে ফেলতে পারে সময় শেষ হওয়ার আগেই এবং আরও অনেক কিছুই এটিকে চালিয়ে দিতে পারে দীর্ঘ)।
নিশ্চিতভাবে আপনি একটি স্ট্যান্ডার্ড ডেস্কটপ অপারেটিং সিস্টেমে সর্বনিম্ন যে পরিমাণটি পেতে পারেন তা প্রায় 16 মিমি হতে চলেছে (টাইমার গ্রানুলারিটি প্লাস প্রসঙ্গে 10 সেকেন্ডের জন্য ঘুমাতে।
জিআইএল ধারণকারী সিগন্যাল, অন্যান্য থ্রেড, কার্নেলের সময়সূচী মজাদার, প্রসেসরের স্পিড স্টেপিং ইত্যাদি সমস্তই আপনার থ্রেড / প্রক্রিয়াটি ঘুমানোর সময়কালের সাথে সর্বনাশা খেলতে পারে।
উইন্ডোজ ১০-এ পাইথন ৩.7 এ সম্প্রতি এটি পরীক্ষা করা হয়েছে যথার্থতা প্রায় 1 মিমি।
def start(self):
sec_arg = 10.0
cptr = 0
time_start = time.time()
time_init = time.time()
while True:
cptr += 1
time_start = time.time()
time.sleep(((time_init + (sec_arg * cptr)) - time_start ))
# AND YOUR CODE .......
t00 = threading.Thread(name='thread_request', target=self.send_request, args=([]))
t00.start()
ঘুমের যুক্তিটি পাস করার জন্য কোনও ভেরিয়েবল ব্যবহার করবেন না () আপনার অবশ্যই গণনাটি সরাসরি ঘুমের মধ্যে inোকাতে হবে ()
এবং আমার টার্মিনাল ফিরে
1 ───── 17: 20: 16.891 ───────────────────
2 ───── 17: 20: 18.891 ───────────────────
3 ───── 17: 20: 20.891 ───────────────────
4 ───── 17: 20: 22.891 ───────────────────
5 ───── 17: 20: 24.891 ───────────────────
....
689 ─── 17: 43: 12.891 ────────────────────
690 ─── 17: 43: 14.890 ────────────────────
691 ─── 17: 43: 16.891 ────────────────────
692 ─── 17: 43: 18.890 ────────────────────
693 ─── 17: 43: 20.891 ────────────────────
...
727 ─── 17: 44: 28.891 ────────────────────
728 ─── 17: 44: 30.891 ────────────────────
729 ─── 17: 44: 32.891 ────────────────────
730 ─── 17: 44: 34.890 ────────────────────
731 ─── 17: 44: 36.891 ────────────────────