簡體   English   中英

Python:對腳本的多個執行進行速率限制

[英]Python: Rate Limit Multiple Executions of Script

我試圖找到一種方法來限制單個線程的速率。 多次調用同一腳本,將后續執行排隊或限制在定義的參數內。

我發現了很多多處理和多線程解決方案,但這些解決方案僅適用於腳本的一次執行。 我不確定如何對同一腳本的單獨執行進行處理。

我的目標是將線程執行的數量限制為每秒二十(20)個。 等待或排隊后續執行,並繼續基於FIFO處理。

為了進行測試,讓我們將約束設置為每分鍾三(3)個。 不知道從哪里開始,只顯示rate_limit()作為占位符。

import time

rate = 60
limit = 3

ts = time.time()

def single_task():
    print ts

rate_limit(single_task())

多次執行的結果應如下所示:

session_1$ ./script.py 
1527483557.76

session_2$ ./script.py 
1527483558.26

session_3$ ./script.py 
1527483559.03

session_4$ ./script.py
hang on a minute... 
1527483560.57 

session_5$ ./script.py 
hang on a minute... 
1527483561.92

我遇到了類似的問題,並編寫了一個小python包( mp_throttle )來限制和監視多個線程或進程。 您可以通過pip install mp_throttle進行pip install mp_throttle 您可以使用速率限制將其實例化,然后將節流對象處理到線程中。 然后使用.await_fuel()來根據限制阻止線程。

import mp_throttle
import threading
import time

def single_task(throttle):
    while not throttle.kill_flag.is_set():
        throttle.await_fuel()
        print("{}: executed at: {}".format(threading.currentThread().name, time.time()))
    return

throttle = mp_throttle.Throttle(3,60)

for i in range(5):
    t = threading.Thread(target=single_task, args=(throttle,), daemon=True)
    t.start()

throttle.start()
time.sleep(40)
throttle.stop()

這將輸出類似:

Thread-1: executed at: 1534428994.0086124
Thread-2: executed at: 1534429014.013284
Thread-3: executed at: 1534429034.0338206

根據任務的類型(常規執行時間與非常規執行時間),系統(最小睡眠時間和睡眠精度)和速率(速率越高,精度越低),可能需要進行一些設置和校准。 看一下有關更多內容的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM