web-dev-qa-db-ja.com

Pythonでどうやって時間を遅らせることができますか?

Pythonスクリプトに時間遅延を設定する方法を知りたいです。

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

これは、何かがおよそ1分に1回実行される別の例です。

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

timeモジュールsleep()関数を使用できます。 1秒未満の解決のためにfloat引数を取ることができます。

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

もっと読む ここ

670
pobk

this を読んでください。

時間モジュールでスリープ機能を試してください。

import time
time.sleep(60)

これをwhileループに入れると、ステートメントはその日のうちに実行されます...これにより、コマンドの実行時間に関係なく、事前定義された間隔でステートメントを実行できます。たとえば、1分に1回pingを実行したいと思います。 time.sleep(60)またはtime.sleep(45)だけでも、pingの実行時間が同じになるとは限りません。これがコードです:)

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

[5]time.localtime()の戻り値から秒を引き出すだけです。

time.sleepの素晴らしいところは、浮動小数点数をサポートしているということです!

import time
time.sleep(0.1) 

詳しくは

135
tehvan

Pythonでどうやって時間を遅らせることができますか?

シングルスレッドでは、 スリープ機能 をお勧めします。

>>> from time import sleep

>>> sleep(4)

この関数は、オペレーティングシステムによって呼び出されたスレッドの処理を実際に中断し、スリープ中に他のスレッドやプロセスを実行できるようにします。

その目的のためにそれを使用するか、または単に機能の実行を遅らせるためにそれを使用してください。例えば:

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

「フーレイ!」私がヒットした3秒後に印刷されます Enter

複数のスレッドとプロセスでsleepを使用する例

繰り返しになりますが、sleepはスレッドを一時停止します - 処理能力がゼロに近い値を使用します。

説明するために、このようなスクリプトを作成します(私は最初に対話型Python 3.5シェルでこれを試みましたが、サブプロセスは何らかの理由でparty_later関数を見つけることができません)。

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 __== '__main__':
    main()

このスクリプトからの出力例:

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

マルチスレッド

Timerthreading オブジェクトを使用して、後で別のスレッドで関数を呼び出すことができます。

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

>>> 

空白行は、関数が標準出力に出力され、ヒットしなければならなかったことを示しています。 Enter 私がプロンプトに参加していることを確認するため。

このメソッドの優れた点は、Timerスレッドが待機している間に、他のこと、この場合はヒットすることができたことです。 Enter 1回 - 関数が実行される前(最初の空のプロンプトを参照).

マルチプロセッシングライブラリ にはそれぞれのオブジェクトはありません。作成することはできますが、それはおそらく理由で存在しません。サブスレッドは、まったく新しいサブプロセスよりも単純なタイマーにとってはるかに理にかなっています。

68
Aaron Hall

眠い generator のちょっとした面白さ。

問題は時間の遅れです。それは固定時間である場合もありますが、場合によっては前回以来測定される遅延が必要となるかもしれません。考えられる解決策は次のとおりです。

前回以降に測定された遅延(定期的に起きる)

状況としては、可能な限り定期的に何かをしたいと思っていて、すべてのlast_timenext_timeのことに煩わされたくない場合があります。

ブザー発生器

次のコード( sleepy.py )はbuzzergenジェネレータを定義します。

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

通常のブザーゲンを呼び出す

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

実行すると、

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

ループ内で直接使用することもできます。

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

実行すると、

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)

見ての通り、このブザーはそれほど厳格ではなく、寝過ごして定期的なスケジュールから抜け出しても、定期的な眠気の間隔に追いつくことができます。

43
Jan Vlcinsky

私が知っている5つのメソッドがあります:time.sleep()pygame.time.wait()、matplotlibのpyplot.pause().after()、そしてdriver.implicitly_wait()


time.sleep()の例(Tkinterを使う場合は使わないでください):

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

pygame.time.wait()の例(pygameウィンドウを使用していない場合はお勧めできませんが、すぐにウィンドウを閉じることができます)。

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の関数pyplot.pause()の例(グラフを使用していない場合はお勧めできませんが、すぐにグラフを終了できます)。

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

.after()メソッド(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')

最後に、driver.implicitly_wait()メソッド(Selenium):

driver.implicitly_wait(5)#waits 5 seconds
23
Trooper Z

遅延は timeライブラリ 、特に time.sleep() 関数で行われます。

ちょっと待ってください。

from time import sleep
sleep(1)

こうすることで、これが機能します。

from time import sleep

timeライブラリ から sleep関数 only を抽出します。つまり、次のようにして呼び出すことができます。

sleep(seconds)

入力するよりもむしろ

time.sleep()

入力するのが面倒です。

この方法では、 timeライブラリ の他の機能にアクセスすることはできず、sleepという変数を持つこともできません。しかし、あなたはtimeと呼ばれる変数を作成することができます。

from [library] import [function] (, [function2]) を実行するのは、モジュールの特定の部分だけが欲しい場合に最適です。

あなたは同様にそれをすることができます:

import time
time.sleep(1)

time.clock()と入力すれば、 timeライブラリの他の機能 like time.[function]() にアクセスできますが、インポートを上書きするため、変数timeを作成することはできません。これに対する解決策

import time as t

これにより、 timeライブラリtとして参照でき、以下のことが可能になります。

t.sleep()

これはどのライブラリでも機能します。

23
Matthew Miles

Python標準ライブラリのtkinterライブラリは、インポート可能な対話型のツールです。基本的には、コードで操作するウィンドウとして表示されるボタンやボックス、ポップアップなどを作成できます。

あなたがtkinterを使うなら、TIME.SLEEP()を使わないでください。これは私に起こりました。代わりに、root.after()を使用して、ミリ秒を使って何秒もの値を置き換えてください。たとえば、time.sleep(1)はtkinterのroot.after(1000)と同等です。

さもなければ、多くの答えが指摘しているtime.sleep()、これが進むべき道です。

23
Parallax Sugar

Pythonで時間を遅らせる最も良い方法はtimeライブラリを使うことです。このような:

import time
time.sleep(10)

10を遅らせたい秒数に置き換えてください。 '10 .1'、 '5.07'などの形式を使用できます。

Tkinterと一緒に使うことはお勧めできません。

19

遅延は3つの方法で実装できます。

最も簡単なものから始めましょう。

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

遅らせる2番目の方法は、暗黙のwaitメソッドを使うことです。

 driver.implicitly_wait(5)

3番目の方法は、特定のアクションが完了するまで、または要素が見つかるまで待つ必要がある場合に、もっと便利です。

self.wait.until(EC.presence_of_element_located((By.ID, 'UserName'))
17
Humble_boy
import time
time.sleep(1) #sleep for one second.

簡単な例:

#After five seconds,output "hello python!!!"
import time
time.sleep(5)
print("hello python!!!")
9
Jia

asyncio.sleep

最近のPythonバージョン(python 3.4以降)では asyncio.sleep を使用できることに注意してください。これは非同期プログラミングと非同期に関連しています。次の例をチェックしてください。

import asyncio
from datetime import datetime

@asyncio.coroutine
def countdown(iteration_name, countdown_sec):
    """
    Just count for some countdown_sec seconds and do nothing else
    """
    while countdown_sec > 0:
       print(f'{iteration_name} iterates: {countdown_sec} seconds')
       yield from asyncio.sleep(1)
       countdown_sec -= 1

loop = asyncio.get_event_loop()
tasks = [asyncio.ensure_future(countdown('First Count', 2)),
         asyncio.ensure_future(countdown('Second Count', 3))]

start_time = datetime.utcnow() 

# run both methods. How much time will both run...?
loop.run_until_complete(asyncio.wait(tasks))

loop.close()

print(f'total running time: {datetime.utcnow() - start_time}')

最初の方法では2秒間、次に2番目の方法では3秒間、合計5秒間のこのコードの実行時間で「スリープ」すると思います。しかし、それは印刷されます:

total_running_time: 0:00:03.01286

asyncio公式ドキュメントを読むことをお勧めします 詳細については/

5
Aaron_ab

あなたはpythonプログラムの実行を遅らせるためにtime packageでsleepメソッドを使うことができます

import time
time.sleep(1)   # Delays for 1 seconds.
4
Codemaker

これは時間遅延の簡単な例です。

import time

def delay(period='5'):
    # If the user enters nothing, It'll wait 5 seconds
    try:
        #If the user not enters a int, I'll just return ''
        time.sleep(period)
    except:
        return ''

もう一つ、Tkinterで:

import tkinter

def tick():
    pass

root=Tk()
delay=100 # time in milliseconds
root.after(delay,tick)
root.mainloop()
4
Tejas Joshi

Pythonスクリプトに時間遅延を入れたい場合は、次のようにします。

time.sleepまたはEvent().waitを次のように使用します。

from threading import Event
from time import sleep

delay_in_sec = 2

# use time.sleep like this
sleep(delay_in_sec)         # returns None
print(f'slept for {delay_in_sec} seconds')

# or use Event().wait like this
Event().wait(delay_in_sec)  # returns False
print(f'waited for {delay_in_sec} seconds')       

ただし、関数の実行を遅らせたい場合は、次のようにします。

threading.Timer を次のように使用します。

from threading import Timer 

delay_in_sec = 2

def hello(delay_in_sec):
    print(f'function called after {delay_in_sec} seconds')

t = Timer(delay_in_sec, hello, [delay_in_sec])  # hello function will be called 2 sec later with [delay_in_sec] as *args parameter
t.start()  # returns None
print("Started")

出力:

Started
function called after 2 seconds         

なぜ後者のアプローチを使うのですか?

  • しない は、スクリプト全体の実行を停止します。 (あなたがそれを渡す機能を除いて)
  • タイマーを起動した後、timer_obj.cancel()を実行してタイマーを停止することもできます。
3
BlackBeard

私は以前の答えを見てきました、そして私は単にそれらの上に構築したいと思います。

私はよくタイピング効果を作りたいと思っています、これがあなたがこれをどのようにすることができるかです(Python 3):

import time # For pausing

def typewrite(text):
    for i in text:
        print(i, end="", flush=True) # flush is True, so the result will get printed before waiting
        time.sleep(0.1)

そしてPython 2では:

import time, sys # Time is for pausing, sys for printing without a new line

def typewrite(text):
    sys.stdout.flush() # flush is True, so the result will get printed before waiting
    for i in text:
        sys.stdout.write(i)
        time.sleep(0.1)

私はこれが何らかの形であなたを助けてくれたと思います。

3
SimpleBinary

他の誰もが事実上のtimeモジュールを提案しましたが、私はmatplotlibpyplot関数、 pause を使って別の方法を共有したいと思いました。

from matplotlib import pyplot as plt
plt.pause(5)    # Pauses the program for 5 seconds

通常、これはプロットされた直後にプロットが消えるのを防ぐため、または生のアニメーションを作成するために使用されます。

importが既にインポートされている場合、これはmatplotlibを節約するでしょう。

3
Haran Rajkumar

Autopyguiがインストールされている場合は、次を使用できます。

#imports
import pyautogui

pyautogui._autoPause(time1,time2)

合計一時停止時間はtime1 * time2秒になります

0
edison