小编dan*_*360的帖子

多个Python进程变慢

我有一个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 unix performance http task

4
推荐指数
1
解决办法
2311
查看次数

Python编码UnicodeDecodeError

我已经把这个问题搞砸了好几个小时,我似乎无法深究它.我已经详细浏览了这个网站,虽然其他人似乎有类似的问题,但他们给出的解决方案对我不起作用.

我有一个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中声明.

我相信有一个简单的方法,但我找不到它.

谢谢你的帮助.

python character-encoding

0
推荐指数
1
解决办法
1829
查看次数

标签 统计

python ×2

character-encoding ×1

http ×1

performance ×1

task ×1

unix ×1