time.sleep()でpythonで実行を一時停止します

電話time.sleep()Pythonコードを一定数秒間一時停止する最も簡単な方法です。非同期コードの場合は、使用してくださいasyncio.sleep()、そしてスレッドまたはGUIの場合は、非ブロッキング待機を好むため、アプリは応答性が高い。

ステップ1:時間モジュールをインポートします。

import time

ステップ2:呼び出しで実行を一時停止しますtime.sleep(seconds)。

print("Starting...")
time.sleep(2)  # sleep for 2 seconds
print("Done.")

ステップ3:フロートを渡して、1秒後の遅延のために睡眠をとります。

time.sleep(0.1)  # 100 milliseconds

ステップ4:ループ内のスリープを挿入して、ポーリングやAPI呼び出しなどのリミット作業を評価します。

for _ in range(5):
    print("Tick")
    time.sleep(1)

ステップ5:電話を避けてくださいtime.sleep()GUIのメインスレッドまたは非同期イベントループ内。凍結を防ぐために、以下のオプションを使用してください。

オプション2:Async機能でasyncio.sleep()を使用します

ステップ1:待っている非同期関数を定義しますasyncio.sleep()ブロックする代わりに。

import asyncio

async def work():
    print("Hello ...")
    await asyncio.sleep(1)
    print("... world!")

ステップ2:でコルーチンを実行しますasyncio.run()したがって、イベントループは待っている間、応答性の高いままです。

asyncio.run(work())

ステップ3:より良いスループットのために同時に待つために複数のタスクをスケジュールします。

import asyncio

async def step(name, delay):
    await asyncio.sleep(delay)
    print(f"{name} done")

async def main():
    t1 = asyncio.create_task(step("A", 1))
    t2 = asyncio.create_task(step("B", 2))
    t3 = asyncio.create_task(step("C", 3))
    await t1
    await t2
    await t3

asyncio.run(main())

オプション3:レスポンシブスレッドの遅延にevent.wait()を使用します

スレッドを使用すると、イベントを待つことですぐにシャットダウンし、ブロッキングスリープが終了するのを待たないようにします。ドキュメントのイベントオブジェクトを参照してください。

ステップ1:aを作成しますthreading.Event()そのワーカースレッドはタイムアウトで待つことができます。

提案された読み:

import threading
import time

stop = threading.Event()

ステップ2:各労働者で、交換しますtime.sleep()とstop.wait(timeout)したがって、スレッドは、信号が発生するとすぐに終了できます。

def worker():
    while not stop.is_set():
        print("working...")
        # Wait up to 1s, but return early if stop is set
        stop.wait(1)

ステップ3:ワーカースレッドを起動し、イベントを設定してきれいに停止します。

t = threading.Thread(target=worker, name="worker-1")
t.start()
time.sleep(3)
stop.set()
t.join()

オプション4:UIをフリーズすることなく、Tkinterでの遅延をスケジュールする

tkinterでは、ウィジェットを使用しますafter(ms, callback)イベントループをブロックせずに後でコードを実行する方法。メソッドはTKINTERドキュメントにリストされています。

ステップ1:ルートウィンドウと必要なUIを作成します。

import tkinter as tk

root = tk.Tk()
root.geometry("300x150")

ステップ2:でコールバックをスケジュールしますroot.after(delay_ms, func)使用する代わりにtime.sleep()。

def delayed():
    print("Ran after 2 seconds")

root.after(2000, delayed)

ステップ3:UIが待っている間、UIがインタラクティブに保つようにイベントループを開始します。

root.mainloop()

簡単なヒント

  • time.sleep()現在のスレッドのみをブロックします。他のスレッドは実行され続けます。
  • たとえば、分数秒間フロートを使用しますtime.sleep(0.25)。
  • 好むasyncio.sleep()内部の非同期コードとEvent.wait()速いシャットダウンのためのスレッドサービスで。
  • GUIアプリでは、タイマーを使用して作業をスケジュールします(たとえば、tkinterafter)凍結した窓を防ぐため。

ランタイムに一致するスリーププリミティブを選択します:同期、非同期、スレッドベース、またはGUI。応答性を維持する必要があるアプリの部分をブロックせずに、必要な遅延が発生します。

Related Posts