time الدوال - احصل على وقت POSIX / Unix بالثانية و nanoseconds في Python؟




بايثون اوامر (6)

يتم فقد الدقة الخاصة بك فقط بسبب تنسيق السلسلة:

>>> import time
>>> print "%.20f" % time.time()
1267919090.35663390159606933594

لقد كنت أحاول العثور على طريقة للحصول على الوقت منذ 1970-01-01 00:00:00 بالتوقيت العالمي في ثوان و nanoseconds في بيثون وأنا لا يمكن العثور على أي شيء من شأنها أن تعطيني الدقة المناسبة.

لقد حاولت استخدام وحدة الوقت ، ولكن هذه الدقة هي فقط إلى ميكروثانية ، لذلك كان الرمز الذي جربته:

import time

print time.time()

مما أعطاني نتيجة مثل هذا:

1267918039.01

ومع ذلك ، أحتاج إلى نتيجة تبدو كالتالي:

1267918039.331291406

لا أحد يعرف طريقة ممكنة للتعبير عن وقت UNIX في ثوان و nanoseconds؟ لا أستطيع العثور على طريقة لتعيين الدقة المناسبة أو الحصول على نتيجة بالتنسيق الصحيح. شكرا لك على أي مساعدة


من غير المحتمل أن تحصل على دقة nanosecond من أي جهاز حالي.

لا يمكن للآلة إنشاء الدقة ، وعرض أرقام مهمة حيث لا يكون مناسبًا هو الشيء الصحيح الواجب فعله.


لا أعتقد أن هناك طريقة مستقلة عن النظام الأساسي (ربما يكون هناك طرف ثالث قد تم ترميزه ، لكنني لا أستطيع العثور عليه) للحصول على الوقت بالنانوثانية. تحتاج إلى القيام بذلك بطريقة خاصة بالمنصة. على سبيل المثال ، توضح إجابة سؤال SO هذا كيفية القيام بذلك على النظام الأساسي الذي يوفر مكتبة نظام librt.so لعمليات "الوقت الفعلي".


يعتمد ذلك على نوع الساعة ونظام التشغيل والنظام الخاص بك أو لا يمكنك حتى الحصول على دقة النانوسيكند على الإطلاق . من وثائق الوحدة time :

قد تكون دقة مختلف الوظائف في الوقت الحقيقي أقل مما تقترحه الوحدات التي يتم التعبير عن قيمتها أو حجةها. على سبيل المثال ، على معظم أنظمة يونكس ، فإن "القراد" على مدار الساعة فقط 50 أو 100 مرة في الثانية.

في بايثون 3 ، تمنحك الوحدة time الوصول إلى 5 أنواع مختلفة من الساعة ، لكل منها خصائص مختلفة. بعض هذه قد تقدم لك توقيت دقيق النانوسيكند. استخدم الدالة time.get_clock_info() لترى الميزات التي يقدمها كل ساعة time.get_clock_info() الدقة التي يتم الإبلاغ عنها فيها.

على جهاز الكمبيوتر المحمول الخاص بي OS X 10.11 ، الميزات المتوفرة هي:

>>> for name in ('clock', 'monotonic', 'perf_counter', 'process_time', 'time'):
...     print(name, time.get_clock_info(name), sep=': ')
...
clock: namespace(adjustable=False, implementation='clock()', monotonic=True, resolution=1e-06)
monotonic: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)
perf_counter: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)
process_time: namespace(adjustable=False, implementation='getrusage(RUSAGE_SELF)', monotonic=True, resolution=1e-06)
time: namespace(adjustable=True, implementation='gettimeofday()', monotonic=False, resolution=1e-06)

لذا ، فإن استخدام time.monotonic() أو time.perf_counter() قد يمنحني نظريًا دقة nanosecond. لا يعطيني الساعة الوقت الجدار ، فقط الوقت المنقضي. القيم تكون عشوائية. ومع ذلك فهي مفيدة لقياس الوقت الذي استغرقه شيء ما.


ربما تكون المشكلة مرتبطة بنظام التشغيل الخاص بك ، وليس بيثون. راجع وثائق الوحدة time : http://docs.python.org/library/time.html

time. time()

قم بإرجاع الوقت كرقم نقطة عائمة تم التعبير عنه بالثواني منذ الحقبة ، بالتوقيت العالمي المنسق UTC. لاحظ أنه على الرغم من أنه يتم دائمًا إرجاع الوقت كرقم نقطة عائمة ، إلا أن جميع الأنظمة لا توفر الوقت بدقة أفضل من ثانية واحدة . بينما تقوم هذه الدالة عادة بإرجاع قيم غير متناقصة ، فإنها يمكن أن تعرض قيمة أقل من مكالمة سابقة إذا تم ضبط ساعة النظام مرة أخرى بين مكالمتين.

بعبارة أخرى: إذا كان نظام التشغيل الخاص بك لا يستطيع القيام بذلك ، فإن بيثون لا تستطيع فعل ذلك. يمكنك مضاعفة قيمة الإرجاع حسب ترتيب الحجم المناسب للحصول على القيمة النانوية ، على الرغم من أنها غير دقيقة كما قد تكون.

EDIT: يمثل الإرجاع متغيرًا عائمًا ، لذا سيختلف عدد الأرقام بعد الفاصلة ، سواء كان نظام التشغيل الخاص بك يحتوي على هذا المستوى من الدقة أم لا. يمكنك تنسيقه بـ "%.nf" حيث "%.nf" n إلى عدد الخانات التي تريدها ، على الرغم من ذلك ، إذا كنت تريد تمثيل سلسلة نقطة ثابتة.


الإجابة على سؤالك كمثال تم ذكره مسبقًا:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

print items.__len__()






python time posix