0

使用urllib2.urlopen()していますが、プロセスがブロックされています

urllib2.urlopen()デフォルトのタイムアウトがあることは承知しています。

通話をブロックできないようにする方法は?

バックトレースは

(gdb) bt 
#0 0x0000003c6200dc35 in recv () from /lib64/libpthread.so.0 
#1 0x00002b88add08137 in ?? () from /usr/lib64/python2.6/lib-dynload/_socketmodule.so 
#2 0x00002b88add0830e in ?? () from /usr/lib64/python2.6/lib-dynload/_socketmodule.so 
#3 0x000000310b2d8e19 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
4

2 に答える 2

3

あなたの問題が、読み終えるためにurllibが必要なことである場合

read() 操作は、Python でのブロック操作です。

非同期リクエストを作成する場合

問題がタイムアウトを設定する必要がある場合

繰り返しますが、requests上記のライブラリを使用してください。

于 2012-07-26T08:04:06.393 に答える
2

(または同様の)ツールを使用して、Pythonスクリプトをブロックしてstraceいる実際のシステムコールを特定することができます(例:Linux)。$ strace python yourscript.py

yourscript.py:

from urllib2 import urlopen
urlopen("http://somesite.local/foobar.html")

$ strace python yourscript.py

... lots of system call stripped ...
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("127.0.0.1")}, 16
于 2012-07-26T07:18:19.900 に答える