Soru Python'da nasıl bir gecikme yapabilirim?


Bir Python senaryosunda zaman gecikmesi nasıl yazılacağını bilmek isterim.


2032
2018-02-04 07:04


Menşei




Cevaplar:


import time
time.sleep(5)   # Delays for 5 seconds. You can also use a float value.

Burada, bir şeyin yaklaşık dakikada bir kez çalıştırıldığı başka bir örnek:

import time
while True:
    print("This prints once a minute.")
    time.sleep(60) # Delay for 1 minute (60 seconds).

2262
2018-02-04 07:05



Olmak için bazı koşullara ihtiyacınız varsa. Threading.Event.wait kullanıcısı daha iyi. - ssj
Eh ... bundan daha az baskı yapar, çünkü tüm arabellekleri basmak ve işlemek (bazen bir çekirdek bağlam anahtarı yapmak) ve alarm sinyalini kaydetmek zaman alır, ama ... evet. Dakikada bir kereden az. - Parthian Shot
grafik kullanıcı arabirimi olarak tkinter kullanırken, sleep () işi yapmayacaktır - bunun yerine after () kullanın: tkinter.Tk.after (yourrootwindow, 60000) veya yourrootwindow.after (60000) - DonGru
Bunun için teşekkürler ne uyku olduğunu anlamak mümkün değildi, tekrar teşekkürler. - harrypotter0
Windows'da, en iyi ayrıntı düzeyinin yaklaşık 0,015 saniye (15 ms) doğruluğu olduğunu söyleyebiliriz. Linux'un modern işlemcilerdeki çoğu sürümü 0.001 saniyelik (1 ms) ayrıntı düzeyine inebilir. - SDsolar


Kullanabilirsiniz sleep() Zaman modülünde fonksiyon. Alt ikinci çözünürlük için bir float argüman alabilir.

from time import sleep
sleep(0.1) # Time in seconds.

568
2017-09-15 16:34



Uyanma için bir işlev var mı? - Elfin forest
@Elfinforest ne demek istiyorsun? - Neil Chowdhury
Evet, ama farklı platformlardaki gerçek zaman çözünürlüğü hakkında ne söylenebilir? Bazı garantiler var mı? Çözünürlük 16.666 ms olabilir mi? - Peter Mortensen


Lütfen oku https://web.archive.org/web/20090207081238/http://faqts.com/knowledge_base/view.phtml/aid/2609/fid/378, size daha fazla yardımcı olabilir:

Zaman modülünde uyku fonksiyonunu deneyin.

import time
time.sleep(60)

Ve bunu bir while döngü ve bir ifade sadece üzerinde yürütecek   dakika ... Bu önceden tanımlanmış aralıklarla bir ifade çalıştırmanıza izin verir   komutun ne kadar sürdüğüne bakılmaksızın (daha az sürdüğü sürece   bir dakika ya da 5 ya da 60 ya da ne ayarlamış olursanız olun) Örneğin   Bir dakikada bir ping koş. Ben sadece time.sleep(60) veya time.sleep(45)    Hatta, ping her zaman aynı miktarda zaman almayacaktır. Burada   kod :)

time.sleep(time.localtime(time.time())[5])

[5] sadece saniyeyi dışarı çeker time.localtime()geri dönüş   değer.

Hakkında harika bir şey time.sleep kayan noktayı destekliyor mu?   sayılar!

import time
time.sleep(0.1) 

http://python.org/doc/current/lib/module-time.html


117
2018-02-04 07:07



time.sleep(time.localtime(time.time())[5]) Hiç bir anlam ifade etmiyor. Bir sonraki tam dakikaya kadar daha az zaman varsa bu daha uzun süre beklerdi. Mevcut dakikanın sonuna kadar beklemek isterseniz, şunu öneriyorum: time.sleep(-time.time() % 60) (Bu da diğer aralıklarla çalışır) - Stefan Paul Noack


Bunu sadece bunu yaparak alabilirsiniz:

from time import sleep

# Doing stuff
sleep(0.5) # Sleeping half a second (sleep() uses seconds, but you can also use floats)
# Doing stuff...

54
2018-01-18 18:48



Yukarıdaki cevaba veya bunun üzerine hiçbir şey eklemez. - Artemis Fowl
aslında bir paket kurulum gerektirmez, bu yüzden muhtemelen en iyi cevap olarak işaretlenmelidir - s2t2


Uykulu bir eğlence jeneratör.

Soru zaman gecikmesi ile ilgili. Zaman sabitlenebilir, ancak bazı durumlarda geçen zamandan beri ölçülen bir gecikmeye ihtiyacımız olabilir. İşte olası bir çözüm:

Gecikmeden beri ölçülen gecikme (düzenli olarak uyanma)

Durum, olabildiğince düzenli olarak bir şeyler yapmak istiyoruz ve tüm bunlarla uğraşmak istemiyoruz. last_time, next_time kodumuzun her yerinden.

Buzzer jeneratör

Aşağıdaki kod (sleepy.py) tanımlar buzzergen jeneratör:

import time
from itertools import count

def buzzergen(period):
    nexttime = time.time() + period
    for i in count():
        now = time.time()
        tosleep = nexttime - now
        if tosleep > 0:
            time.sleep(tosleep)
            nexttime += period
        else:
            nexttime = now + period
        yield i, nexttime

Düzenli buzzergen çağırıyor

from sleepy import buzzergen
import time
buzzer = buzzergen(3) # Planning to wake up each 3 seconds
print time.time()
buzzer.next()
print time.time()
time.sleep(2)
buzzer.next()
print time.time()
time.sleep(5) # Sleeping a bit longer than usually
buzzer.next()
print time.time()
buzzer.next()
print time.time()

Ve koşarak görüyoruz:

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

Doğrudan bir döngüde de kullanabiliriz:

import random
for ring in buzzergen(3):
    print "now", time.time()
    print "ring", ring
    time.sleep(random.choice([0, 2, 4, 6]))

Ve koşarak görebiliyoruz:

now 1400102751.46
ring (0, 1400102754.461676)
now 1400102754.46
ring (1, 1400102757.461676)
now 1400102757.46
ring (2, 1400102760.461676)
now 1400102760.46
ring (3, 1400102763.461676)
now 1400102766.47
ring (4, 1400102769.47115)
now 1400102769.47
ring (5, 1400102772.47115)
now 1400102772.47
ring (6, 1400102775.47115)
now 1400102775.47
ring (7, 1400102778.47115)

Gördüğümüz gibi, bu zil sesi çok katı değildir ve düzenli uykulu ve düzenli bir programdan çıksak bile düzenli uykulu aralıklarla yetişmemizi sağlar.


33
2018-05-14 21:30





Python'da nasıl bir gecikme yapabilirim?

Tek bir iş parçacığında uyku işlevini öneririm:

>>> from time import sleep

>>> sleep(4)

Bu aslında, işletim sistemi tarafından çağrıldığı iş parçacığının işlenmesini askıya alır ve diğer iş parçacıklarının ve işlemlerin uyurken yürütmesine izin verir.

Bu amaçla kullanın ya da bir işlevi yürütmeyi geciktirin. Örneğin:

>>> def party_time():
...     print('hooray!')
... 
>>> sleep(3); party_time()
hooray!

"Yaşasın!" vurulduktan 3 saniye sonra Girmek.

Kullanarak örnek sleep Birden çok iş parçacığı ve işlemlerle

Tekrar, sleep iş parçacığınızı askıya alır - sıfır işlem gücünün yanında kullanır.

Bunu göstermek için, böyle bir betik oluşturun (ilk önce bunu etkileşimli bir Python 3.5 kabuğunda denedim, ancak alt süreçler party_later bazı sebeplerden dolayı):

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
from time import sleep, time

def party_later(kind='', n=''):
    sleep(3)
    return kind + n + ' party time!: ' + __name__

def main():
    with ProcessPoolExecutor() as proc_executor:
        with ThreadPoolExecutor() as thread_executor:
            start_time = time()
            proc_future1 = proc_executor.submit(party_later, kind='proc', n='1')
            proc_future2 = proc_executor.submit(party_later, kind='proc', n='2')
            thread_future1 = thread_executor.submit(party_later, kind='thread', n='1')
            thread_future2 = thread_executor.submit(party_later, kind='thread', n='2')
            for f in as_completed([
              proc_future1, proc_future2, thread_future1, thread_future2,]):
                print(f.result())
            end_time = time()
    print('total time to execute four 3-sec functions:', end_time - start_time)

if __name__ == '__main__':
    main()

Bu komut dosyasından örnek çıktı:

thread1 party time!: __main__
thread2 party time!: __main__
proc1 party time!: __mp_main__
proc2 party time!: __mp_main__
total time to execute four 3-sec functions: 3.4519670009613037

Çok iş parçacığı

Ayrı bir iş parçacığında daha sonra çağrılacak bir işlevi tetikleyebilirsiniz. Timeriş parçacığı:

>>> from threading import Timer
>>> t = Timer(3, party_time, args=None, kwargs=None)
>>> t.start()
>>>
>>> hooray!

>>> 

Boş satır, standardımma yazdırılan işlevin ve çarpmam gerektiğini gösteriyor Girmek Ben bir istemi olduğundan emin olmak için.

Bu yöntemin üst tarafı, Timer iş parçacığı bekliyordu, başka şeyler yapabiliyordum, bu durumda, isabet Girmek bir kez - yürütülmeden önce işlev (ilk boş istemi bakın).

Çok işlemcili kitaplıkta ilgili bir nesne yok. Bir tane oluşturabilirsin, ama muhtemelen bir sebepten dolayı yok. Bir alt iş parçacığı, basit bir zamanlayıcı için yepyeni bir alt süreçten çok daha mantıklıdır.


21
2018-06-21 03:25





Python standart kitaplığındaki tinkter kitaplığı içe aktarabileceğiniz etkileşimli bir araçtır. Temel olarak, kodla işlem yaptığınız pencereler olarak görünen düğmeler, kutular ve açılır pencereler ve şeyler oluşturabilirsiniz.

Eğer kireç kullanıyorsanız, KULLANMAYIN TIME.SLEEP() çünkü programınızı bozacak. Bu bana oldu. Bunun yerine, kullanın root.after() ve değerleri milisaniye olarak, ancak birkaç saniye için değiştirin. Örneğin, time.sleep(1) eşdeğerdir root.after(1000) Tinkter'da.

Aksi takdirde, time.sleep()Pek çok cevabın işaret ettiği, ki bu da gitmenin yolu.


20
2018-02-28 19:45





Gecikmeler üç yöntem kullanılarak gerçekleştirilebilir.

En kolay olanla başlayalım:

import time
time.sleep(5) # Delay for 5 seconds.

Geciktirilecek ikinci yöntem, örtülü bekleme yöntemini kullanacaktır:

 driver.implicitly_wait(5)

Üçüncü yöntem, belirli bir eylem tamamlanana kadar veya bir eleman bulunana kadar beklemek gerektiğinde daha kullanışlıdır:

self.wait.until(EC.presence_of_element_located((By.ID, 'UserName'))

11
2018-01-05 10:41



İkinci ve üçüncü yöntem, her seferinde Python değil, selenyum ile ilgilidir. Ve E2E testleri yaparken bunları kullanırsın. OP bunlardan hiç bahsetmedi. - alexandernst


Bir zaman gecikmesi koymak için time modülü. Ve bu modül ile sadece yazmanız gerekir:

time.sleep(The amount of time)

Örneğin, bilgisayar başka bir satır çalıştırmadan önce saniyenin bir gecikme süresini uzatmak isterseniz şunları yapmalısınız:

time.sleep(1)
print('Hello, World!')

Bu kadar :)


9
2017-07-04 10:55



Bu cevap yaklaşık 9 yıl önce ilk yayınlanan cevaptan nasıl farklıdır? - Peter Mortensen


Bildiğim 4 yöntem var: time.sleep(), pygame.time.wait(), matplotlib's pyplot.pause(), ve .after().


time.sleep() örnek (Tkinter kullanıyorsanız kullanmayın):

import time
print('Hello')
time.sleep(5) #number of seconds
print('Bye')

pygame.time.wait() örnek (pygame penceresini kullanmıyorsanız önerilmez, ancak pencereden hemen çıkabilirsiniz):

import pygame
#If you are going to use the time module
#don't do "from pygame import *"
pygame.init()
print('Hello')
pygame.time.wait(5000)#milliseconds
print('Bye')

matplotlib işlevi pyplot.pause() örnek (grafiği kullanmıyorsanız tavsiye edilmez, ancak grafikten hemen çıkabilirsiniz):

import matplotlib
print('Hello')
matplotlib.pyplot.pause(5)#seconds 
print('Bye')

Son olarak, .after() yöntem (Tkinter ile en iyisi):

import tkinter as tk #Tkinter for python 2
root = tk.Tk()
print('Hello')
def ohhi():
 print('Oh, hi!')
root.after(5000, ohhi)#milliseconds and then a function
print('Bye')

7
2017-07-05 20:47





Gecikmeler ile yapılır zaman kütüphanesiözellikle Uyku zamanı() fonksiyon ...

Sadece bir saniye beklemek için:

from time import sleep
sleep(1)

Bu, aşağıdakileri yaparak çalışır:

from time import sleep

sen çıkar uyku fonksiyonu  bir tek itibaren zaman kütüphanesi Yani sadece ile arayabileceğiniz anlamına gelir:

sleep(seconds)

yazmak zorunda kalmak yerine

time.sleep()

Yazmak için garip bir şekilde uzun.

Bu yöntemle, diğer özelliklerine erişemezsiniz. zaman kütüphanesi ve uyku denilen bir değişken olamaz. Ama zaman adı verilen bir değişken yaratabilirsiniz.

[library] içe aktarma [function] 'dan (, [function2]) Bir modülün belirli kısımlarını istiyorsanız harikadır.

Bunu eşit olarak yapabilirsin

import time
time.sleep(1)

ve diğer özelliklerine erişebilirsiniz. zaman kütüphanesisevmek time.clock() yazdığınız sürece zaman.işlevi, ancak değişken zamanı oluşturamadı.


6
2018-06-13 19:04