我有一个python脚本,它会向各个域发出大量的HTTP和urllib请求.
我们有大量的域进程,需要尽快完成.由于HTTP请求很慢(即它们可能超出域上没有网站),我会在任何时候运行一些脚本,从数据库中的域列表中提取它们.
我看到的问题是在一段时间内(几小时到24小时)脚本都开始变慢,ps -al显示它们正在睡觉.
服务器功能非常强大(8核,72GB RAM,6TB Raid 6等80MB 2:1连接)并且永远不会超出,即Free -m显示
-/+ buffers/cache: 61157 11337
Swap: 4510 195 4315
Run Code Online (Sandbox Code Playgroud)
顶部显示80-90%闲置
sar -d显示平均5.3%的效用
更有趣的是,iptraf以大约50-60MB/s的速度开始,大约4小时后最终达到8-10MB/s.
我目前在每台服务器(2台服务器)上运行大约500个版本的脚本,它们都显示相同的问题.
ps -al 显示大多数python脚本正在睡觉,我不明白为什么例如:
0 S 0 28668 2987 0 80 0 - 71003 sk_wai pts/2 00:00:03 python
0 S 0 28669 2987 0 80 0 - 71619 inet_s pts/2 00:00:31 python
0 S 0 28670 2987 0 80 0 - 70947 sk_wai pts/2 00:00:07 python
0 S 0 28671 2987 0 80 0 - 71609 …Run Code Online (Sandbox Code Playgroud) 我已经把这个问题搞砸了好几个小时,我似乎无法深究它.我已经详细浏览了这个网站,虽然其他人似乎有类似的问题,但他们给出的解决方案对我不起作用.
我有一个python脚本,它读取网站的HTML并使用漂亮的汤来查找头部,正文,H1等等...然后将它们存储在utf-8 MySQL表中.
看起来很直接,但我一直遇到:
UnicodeDecodeError: 'ascii' codec can't decode byte xxxxxx
Run Code Online (Sandbox Code Playgroud)
当我编码.我已经尝试了所有我能找到的东西来阻止这种情况发生但无济于事.这是代码的一个版本:
soup = BeautifulSoup(strIndexPage)
strIndexPageBody = str(soup.body)
strIndexPageBody = strIndexPageBody.encode('ascii', 'ignore') # I know ignore is not best practice but I am really not interested in anything outside the ascii character set
strIndexPageBody = strIndexPageBody .replace('"','"')
strIndexPageBody = strIndexPageBody .replace("'","&rsquo")
Run Code Online (Sandbox Code Playgroud)
我尝试转换为utf-8的早期版本效果更好,但我最终得到了
`
Run Code Online (Sandbox Code Playgroud)
某些HTML中出现的字符会破坏MySQL的插入/更新.显然我已经尝试搜索这个角色并替换它,但是python告诉我在我的代码中有一个非ascii字符!
我读过很多篇文章,说我应该首先看一下HTML的编码,解码然后编码以适应,但编码并不总是从BS回来,和/或没有在HTML中声明.
我相信有一个简单的方法,但我找不到它.
谢谢你的帮助.