Câu hỏi Làm thế nào tôi có thể làm cho một sự chậm trễ thời gian trong Python?


Tôi muốn biết làm thế nào để đặt một sự chậm trễ thời gian trong một kịch bản Python.


2032
2018-02-04 07:04


gốc




Các câu trả lời:


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

Dưới đây là một ví dụ khác trong đó một cái gì đó chạy khoảng một lần một phút:

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



nếu bạn cần một số điều kiện để xảy ra. Nó tốt hơn cho người dùng threading.Event.wait. - ssj
Vâng ... nó sẽ in ít thường xuyên hơn, bởi vì nó cần có thời gian để in và xử lý tất cả các bộ đệm đòi hỏi (có thể làm một chuyển đổi ngữ cảnh hạt nhân), và để đăng ký tín hiệu báo động, nhưng ... yeah. Ít hơn một lần mỗi phút. - Parthian Shot
khi sử dụng tkinter làm giao diện người dùng đồ họa, sleep () sẽ không thực hiện công việc - sử dụng sau () thay vào đó: tkinter.Tk.after (yourrootwindow, 60000) hoặc là yourrootwindow.after (60000) - DonGru
cảm ơn vì điều này không thể hiểu được giấc ngủ là gì, cảm ơn lần nữa. - harrypotter0
Điều đáng nói là trong Windows mức độ chi tiết tốt nhất bạn có thể hy vọng là khoảng 0,15 giây (15 ms) chính xác. Hầu hết các phiên bản Linux trên các bộ vi xử lý hiện đại có thể giảm xuống đến 0,001 giây (1 ms) chi tiết. - SDsolar


Bạn có thể dùng sleep() trong mô-đun thời gian. Nó có thể lấy một đối số float cho độ phân giải phụ thứ hai.

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

568
2017-09-15 16:34



Có một chức năng để đánh thức? - Elfin forest
@Elfinforest, ý bạn là gì? - Neil Chowdhury
Có, nhưng có thể nói gì về độ phân giải thời gian thực trên các nền tảng khác nhau? Có bảo đảm nào không? Độ phân giải có thể là 16.666 ms không? - Peter Mortensen


Xin vui lòng đọc https://web.archive.org/web/20090207081238/http://faqts.com/knowledge_base/view.phtml/aid/2609/fid/378, có thể giúp bạn thêm:

Hãy thử chức năng ngủ trong mô-đun thời gian.

import time
time.sleep(60)

Và đặt nó vào while vòng lặp và một câu lệnh sẽ chỉ thực thi trên   phút ... Điều đó cho phép bạn chạy một tuyên bố tại các khoảng thời gian được xác định trước   bất kể lệnh mất bao lâu (miễn là nó mất ít hơn   một phút hoặc 5 hoặc 60 hoặc bất cứ điều gì bạn đặt nó) Ví dụ, tôi muốn   chạy ping một lần một phút. Nếu tôi chỉ time.sleep(60) hoặc là time.sleep(45)    thậm chí, ping sẽ không phải lúc nào cũng mất cùng một lượng thời gian. Đây là   mã :)

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

Các [5] chỉ kéo giây ra khỏi time.localtime()sự trở lại của   giá trị.

Điều tuyệt vời về time.sleep là nó hỗ trợ dấu chấm động   số!

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]) Làm cho không có ý nghĩa gì cả. Điều này sẽ chờ lâu hơn nếu có ít thời gian hơn cho đến phút tiếp theo. Nếu bạn muốn đợi đến cuối phút hiện tại, tôi sẽ đề xuất: time.sleep(-time.time() % 60) (điều này cũng làm việc với các khoảng thời gian khác) - Stefan Paul Noack


Bạn có thể nhận được nó bằng cách thực hiện điều này:

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



Không thêm gì vào câu trả lời ở trên hoặc trên đó. - Artemis Fowl
thực sự nó không yêu cầu cài đặt gói, vì vậy nó có lẽ nên được đánh dấu là câu trả lời hay nhất - s2t2


Một chút vui vẻ với buồn ngủ máy phát điện.

Câu hỏi đặt ra là về thời gian trễ. Nó có thể là thời gian cố định, nhưng trong một số trường hợp, chúng tôi có thể cần đo độ trễ từ lần trước. Đây là một giải pháp khả thi:

Độ trễ được đo từ lần trước (thức dậy thường xuyên)

Tình hình có thể là, chúng tôi muốn làm điều gì đó thường xuyên nhất có thể và chúng tôi không muốn bận tâm với tất cả last_time, next_time mọi thứ xung quanh mã của chúng tôi.

Bộ tạo Buzzer

Mã sau đây (sleepy.py) định nghĩa buzzergen máy phát điện:

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

Gọi buzzergen thông thường

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()

Và chạy nó, chúng ta thấy:

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

Chúng ta cũng có thể sử dụng nó trực tiếp trong một vòng lặp:

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

Và chạy nó, chúng ta có thể thấy:

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)

Như chúng ta thấy, còi này không quá cứng nhắc và cho phép chúng tôi bắt kịp với khoảng thời gian ngủ thường xuyên ngay cả khi chúng tôi ngủ quên và ra khỏi lịch trình thường xuyên.


33
2018-05-14 21:30





Làm thế nào tôi có thể làm cho một sự chậm trễ thời gian trong Python?

Trong một chủ đề duy nhất tôi đề nghị chức năng ngủ:

>>> from time import sleep

>>> sleep(4)

Điều này thực sự đình chỉ việc xử lý luồng mà nó được gọi bởi hệ điều hành, cho phép các luồng và các tiến trình khác thực thi trong khi nó ngủ.

Sử dụng nó cho mục đích đó, hoặc chỉ đơn giản là để trì hoãn một chức năng từ thực hiện. Ví dụ:

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

"hoan hô!" in 3 giây sau khi tôi nhấn Đi vào.

Ví dụ sử dụng sleep với nhiều luồng và quy trình

Lần nữa, sleep đình chỉ chuỗi của bạn - nó sử dụng bên cạnh sức mạnh xử lý bằng không.

Để chứng minh, hãy tạo một kịch bản như thế này (lần đầu tiên tôi thử điều này trong một trình vỏ Python 3.5 tương tác, nhưng các tiến trình con không thể tìm thấy party_later chức năng vì một số lý do):

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()

Ví dụ đầu ra từ tập lệnh này:

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

Đa luồng

Bạn có thể kích hoạt một hàm để được gọi sau này trong một chuỗi riêng biệt với Timerđối tượng luồng:

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

>>> 

Dòng trống minh họa rằng hàm được in theo tiêu chuẩn của tôi và tôi phải nhấn Đi vào để đảm bảo tôi đã được nhắc.

Ưu điểm của phương pháp này là trong khi Timer thread đang chờ đợi, tôi đã có thể làm những việc khác, trong trường hợp này, đánh Đi vào một lần - trước khi hàm được thực hiện (xem dấu nhắc trống đầu tiên).

Không có đối tượng tương ứng trong thư viện đa xử lý. Bạn có thể tạo một cái, nhưng nó có thể không tồn tại vì một lý do. Một tiểu chủ đề có ý nghĩa nhiều hơn cho một bộ đếm thời gian đơn giản hơn là một tiến trình con hoàn toàn mới.


21
2018-06-21 03:25





Thư viện tkinter trong thư viện chuẩn Python là một công cụ tương tác mà bạn có thể nhập. Về cơ bản, bạn có thể tạo các nút và hộp, cửa sổ bật lên và nội dung xuất hiện dưới dạng cửa sổ mà bạn thao tác bằng mã.

Nếu bạn sử dụng tkinter, KHÔNG SỬ DỤNG TIME.SLEEP() bởi vì nó sẽ làm hỏng chương trình của bạn. Điều này đã xảy ra với tôi. Thay vào đó, hãy sử dụng root.after() và thay thế các giá trị trong nhiều giây, với một phần nghìn giây. Ví dụ, time.sleep(1) tương đương với root.after(1000) trong tkinter.

Nếu không thì, time.sleep(), mà nhiều câu trả lời đã chỉ ra, đó là con đường để đi.


20
2018-02-28 19:45





Sự chậm trễ có thể được thực hiện bằng cách sử dụng ba phương pháp.

Hãy bắt đầu bằng cách đơn giản nhất:

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

Phương thức thứ hai để trì hoãn sẽ sử dụng phương thức chờ ngầm:

 driver.implicitly_wait(5)

Phương pháp thứ ba hữu ích hơn khi bạn phải đợi cho đến khi một hành động cụ thể được hoàn thành hoặc cho đến khi tìm thấy một phần tử:

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

11
2018-01-05 10:41



Phương thức thứ hai và thứ ba không phải là Python, nhưng có liên quan đến selen. Và bạn sẽ sử dụng chúng khi thực hiện các bài kiểm tra E2E. OP đã không đề cập về bất kỳ của những người. - alexandernst


Để đặt thời gian trễ, bạn nên nhập time mô-đun. Và với mô-đun đó, bạn chỉ cần viết:

time.sleep(The amount of time)

Ví dụ: nếu bạn muốn đặt thời gian trễ một giây trước khi máy tính chạy một dòng khác, bạn nên đặt:

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

Đó là tất cả :)


9
2017-07-04 10:55



Câu trả lời này khác với câu trả lời được đăng đầu tiên như thế nào, cách đây gần 9 năm? - Peter Mortensen


Có 4 phương pháp mà tôi biết: time.sleep(), pygame.time.wait(), matplotlib's pyplot.pause().after().


time.sleep() ví dụ (không sử dụng nếu sử dụng Tkinter):

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

pygame.time.wait() Ví dụ (không nên dùng nếu bạn không sử dụng cửa sổ pygame, nhưng bạn có thể thoát khỏi cửa sổ ngay lập tức):

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')

chức năng của matplotlib pyplot.pause() ví dụ (không được khuyến nghị nếu bạn không sử dụng biểu đồ, nhưng bạn có thể thoát khỏi biểu đồ ngay lập tức):

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

cuối cùng .after() phương pháp (tốt nhất với Tkinter):

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





Sự chậm trễ được thực hiện với thư viện thời gian, cụ thể là thời gian ngủ() chức năng...

Để làm cho nó chờ một giây:

from time import sleep
sleep(1)

Điều này hoạt động bởi vì bằng cách thực hiện:

from time import sleep

bạn giải nén chức năng ngủ  chỉ có từ thư viện thời gian có nghĩa là bạn chỉ có thể gọi nó bằng:

sleep(seconds)

thay vì phải loại ra

time.sleep()

rất khó gõ.

Với phương pháp này, bạn sẽ không có quyền truy cập vào các tính năng khác của thư viện thời gian và bạn không thể có một biến gọi là ngủ. Nhưng bạn có thể tạo một biến gọi là thời gian.

Đang làm từ [library] import [function] (, [function2]) là tuyệt vời nếu bạn chỉ muốn một số phần nhất định của một mô-đun.

Bạn cũng có thể làm như vậy

import time
time.sleep(1)

và bạn sẽ có quyền truy cập vào các tính năng khác của thư viện thời giannhư time.clock() miễn là bạn nhập thời gian.nhưng bạn không thể tạo thời gian biến.


6
2018-06-13 19:04