0

我需要发送数千个 POST 请求。我在网上搜索了信息,经过多次尝试,我编写了以下解决方案:

post_data = urllib.urlencode({'pushes': b64encode(json.dumps(pushes))})
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent,
            'Content-type': "application/x-www-form-urlencoded",
            'Accept': "text/plain"}
request = urllib2.Request(PUSH_URL, data=post_data, headers=headers)
response = urllib2.urlopen(request).read()

pushes 是一个字典列表。

大多数情况下,此解决方案运行良好,但有时会导致目标服务器 (Apache) 出现分段错误。我已经监视了目标服务器上打开的连接。连接数很少(100-200)。也许我的代码不是 100% 正确的。我需要一个更可靠的解决方案。

提前致谢。

更新 - 2013 年 1 月 25 日
我使用 strace 调试 apache Web 服务器(目标服务器)。
我发现 Zend 框架使用的系统调用“gettimeofday”存在一些问题。
我尝试将 zend 应用程序移动到两个不同的服务器 Centos 和 Ubuntu Server 12.04 中。
PHP 版本也从 5.3 更改为 5.4。
我总是遇到同样的问题。

我将应用程序移植到另一个框架。问题消失了。
未修改执行 POST 请求的源服务器上的代码。

4

1 回答 1

1

如果您在 Apache 上有段错误,为什么您认为问题出在您的代码上?我要做的是仔细看看 Apache 发生了什么,当它死亡时 - 打开调试日志记录,strace/ktrace 其进程,最后测试在使用其他 http 服务器(如 Nginx 或 Lighttpd)时是否会发生同样的情况。在不知道 Apache 为何死亡的情况下,您甚至无法尝试在代码中修复它(即使正确的解决方案是修复 Apache)。

于 2013-01-21T10:41:18.660 回答