Pythonスクリプトに時間遅延を設定する方法を知りたいです。
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).
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)
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
Timer
threading オブジェクトを使用して、後で別のスレッドで関数を呼び出すことができます。
>>> from threading import Timer
>>> t = Timer(3, party_time, args=None, kwargs=None)
>>> t.start()
>>>
>>> hooray!
>>>
空白行は、関数が標準出力に出力され、ヒットしなければならなかったことを示しています。 Enter 私がプロンプトに参加していることを確認するため。
このメソッドの優れた点は、Timer
スレッドが待機している間に、他のこと、この場合はヒットすることができたことです。 Enter 1回 - 関数が実行される前(最初の空のプロンプトを参照).
マルチプロセッシングライブラリ にはそれぞれのオブジェクトはありません。作成することはできますが、それはおそらく理由で存在しません。サブスレッドは、まったく新しいサブプロセスよりも単純なタイマーにとってはるかに理にかなっています。
眠い generator のちょっとした面白さ。
問題は時間の遅れです。それは固定時間である場合もありますが、場合によっては前回以来測定される遅延が必要となるかもしれません。考えられる解決策は次のとおりです。
状況としては、可能な限り定期的に何かをしたいと思っていて、すべてのlast_time
やnext_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)
見ての通り、このブザーはそれほど厳格ではなく、寝過ごして定期的なスケジュールから抜け出しても、定期的な眠気の間隔に追いつくことができます。
私が知っている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
遅延は 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()
これはどのライブラリでも機能します。
Python標準ライブラリのtkinterライブラリは、インポート可能な対話型のツールです。基本的には、コードで操作するウィンドウとして表示されるボタンやボックス、ポップアップなどを作成できます。
あなたがtkinterを使うなら、TIME.SLEEP()
を使わないでください。これは私に起こりました。代わりに、root.after()
を使用して、ミリ秒を使って何秒もの値を置き換えてください。たとえば、time.sleep(1)
はtkinterのroot.after(1000)
と同等です。
さもなければ、多くの答えが指摘しているtime.sleep()
、これが進むべき道です。
Pythonで時間を遅らせる最も良い方法はtime
ライブラリを使うことです。このような:
import time
time.sleep(10)
10を遅らせたい秒数に置き換えてください。 '10 .1'、 '5.07'などの形式を使用できます。
Tkinterと一緒に使うことはお勧めできません。
遅延は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'))
import time
time.sleep(1) #sleep for one second.
簡単な例:
#After five seconds,output "hello python!!!"
import time
time.sleep(5)
print("hello python!!!")
最近の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公式ドキュメントを読むことをお勧めします 詳細については/
あなたはpythonプログラムの実行を遅らせるためにtime packageでsleepメソッドを使うことができます
import time
time.sleep(1) # Delays for 1 seconds.
これは時間遅延の簡単な例です。
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()
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()
を実行してタイマーを停止することもできます。私は以前の答えを見てきました、そして私は単にそれらの上に構築したいと思います。
私はよくタイピング効果を作りたいと思っています、これがあなたがこれをどのようにすることができるかです(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)
私はこれが何らかの形であなたを助けてくれたと思います。
他の誰もが事実上のtime
モジュールを提案しましたが、私はmatplotlib
のpyplot
関数、 pause
を使って別の方法を共有したいと思いました。
from matplotlib import pyplot as plt
plt.pause(5) # Pauses the program for 5 seconds
通常、これはプロットされた直後にプロットが消えるのを防ぐため、または生のアニメーションを作成するために使用されます。
import
が既にインポートされている場合、これはmatplotlib
を節約するでしょう。
Autopyguiがインストールされている場合は、次を使用できます。
#imports
import pyautogui
pyautogui._autoPause(time1,time2)
合計一時停止時間はtime1 * time2
秒になります