我正在使用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
答案 0 :(得分:3)
如果您的问题是需要urllib才能完成阅读
read()操作是在Python中阻塞操作。
如果要创建异步请求
如果您的问题需要设置超时
同样,如上所述使用requests
库。
答案 1 :(得分:2)
您可以尝试使用strace
(或类似)工具来确定阻止您的python脚本的实际系统调用是什么,例如在linux上:$ strace python yourscript.py
< / p>
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