-1

誰かがすでにこの問題を解決している可能性があります。DB クエリから結果を返す Python ベースの UDP インターフェイスが必要です。DB は、8 時間あたり 500 クエリのみ提供するように制限されています。これが私のロジックです。

しかし、私は実際には 8 時間の移動ウィンドウを持っているので、数秒ですぐに DB にクエリを実行できます。私は基本的に限界にいます。これに使用できる巧妙な再利用可能なコードを持っている人はいますか?

#!/usr/bin/env python
import SocketServer
import sys,os,httplib,urllib,multiprocessing,time
import syslog
import sqlite3 as lite
syslog.openlog(sys.argv[0],syslog.LOG_PID,syslog.LOG_USER)
count_d=0
stime=int(time.time())

def oprocess(vars):
    global count_d,stime
    dtime=int(time.time())-stime
    score="Unknown"
    if count_d > 500:
        if dtime < 28800:
            syslog.syslog("Exceeded q limit "+str(dtime)+","+str(count))
            return "Unknown"
        else: # Reset the clock
            stime=time.time()
            count_d=0
    data=dbh.do("SELECT...") # Some DB query
    if data != None:
        count_d=count_d+1
        return data

ありがとうビジェイ

4

2 に答える 2

0

すべてのタイムスタンプをリストに保持し、すべてのクエリでフィルタリングします。または、アップストリームに頼ってあなたをブロックし、例外を処理します

import time

queries = []
INTERVAL = 8*24*60
MAX_QUERIES = 500


def do_query():
    global queries
    now = time.time()
    # filter query timestamps
    queries = filter(lambda x: now-x < INTERVAL, queries)
    if len(queries) < MAX_QUERIES:
        # do query
        queries.append(now)
    else:
        raise Exception("too man queries")
于 2013-05-21T19:58:27.377 に答える