2011-01-17 6 views
2

このWRITEFUNCTIONが呼び出された回数を制限しようとしています。私はそれを行うことができる方法はありますか?助けのためのどのようにして、書込み機能に対するカールコールの数を制限できますか?

conn.setopt(pycurl.WRITEFUNCTION, on_receive) 

ありがとう:writefunctionを定義

+1

これは非常に奇妙なことです。 –

+0

どこに書き込みますか?サーバーに送信しているのか、受信していますか?一般的なケースでは、StringIOオブジェクトを渡すか、そこに独自の関数を渡してメモリ内のデータを保持することで、それをだまそうとしてください。関連するコード(少なくともその関数の定義とそれを呼び出すコード)を投稿して、さらに助けることができます。 – TryPyPy

+0

私の問題は、この関数は新しいデータが利用可能なときに呼び出されますが、10回呼び出された後にこの関数を停止する必要があることです。これを行う方法があると思いますか? – Andrew

答えて

1

ここではうまくいくはずの汚いシンプルなバージョンです。テストしてより良い方法を見つけるためにPycURLを構築する。

import pycurl, json 

STREAM_URL = "http://chirpstream.twitter.com/2b/user.json" 

USER = "segphault" 
PASS = "XXXXXXXXX" 

class LimitError(Exception): pass 

counter = 0 
limit = 10 
def on_receive(data): 
    global counter 
    if counter < 10: 
     print data 
     counter += 1 
    else: 
     raise LimitError  
conn = pycurl.Curl() 
conn.setopt(pycurl.USERPWD, "%s:%s" % (USER, PASS)) 
conn.setopt(pycurl.URL, STREAM_URL) 
conn.setopt(pycurl.WRITEFUNCTION, on_receive) 

try: 
    conn.perform() 
    print "Exited Normally" 
except LimitError: 
    print "Reached limit, exiting" 
except pycurl.error: 
    if counter == limit: 
     print "pycurl expected error, nothing to worry about" 
    else: 
     raise 
finally: 
    conn.close() 

print "All done" 
+0

ありがとうございました。あなたは素晴らしいです! – Andrew

+0

悪い知らせは、これまでのところもっと良い方法を見つけられなかったことです。 – TryPyPy

+0

sys.exit()コマンドの代わりに、私のdjangoサーバーを終了しないようにする方法はありますか?私はこれをDjangoビューで実行していると言いました。 – Andrew

関連する問題