归档 2011年4月

最后更新于 .


这次还是把遇到的几个问题整理一下,希望再遇到的同学能轻松解决。另外最近博客的feeds延迟更新的原因也会一起说明一下。

1.linux下创建线程导致内存泄漏
今天在外网发布了一个server之后,用top发现virt的使用量一直在涨,而且一次涨8m。于是可以断定有内存泄漏了,经过排查,最终确定原因出在多线程的问题上:
代码如下:


pthread_t thread_id;
int ret=pthread_create(&thread_id, NULL, flush_thread_work, (void*)&m_sql_client);
if(ret!=0){
APPSCORE_ERROR("Thread creation failed:%d",ret);
return ret;
}

在flush_thread_work函数内部:

void* flush_thread_work(void* args)
{
//....do something
return NULL;
}

代码中启动了一个线程之后,主进程就继续执行,任由新线程自生自灭了(没有调用thread_join),而主进程每隔一段时间就会拉起这样一个线程来做一些数据落地的事情。

这样的写法实际上是会造成内存泄漏的.
Linux man page 里有已经说明了这个问题:


When a joinable thread terminates, its memory ...

最后更新于 .

公司还是不推荐用python,只好屈服使用php,不过用python习惯了,真是发现有些地方不适应,今天写了一段代码,语法检查怎么都通不过,特地放在这里,希望有朋友能指点一下。

代码如下:


function get()
{
$arr = array(
1,2,3
);
return $arr;
}
$y = get()[1];
echo $y;

执行会报如下错误:


Parse error: syntax error, unexpected '['

一开始我还以为又是少写';'之类的问题,仔细检查未果,所以把代码拆成两行,变成:


$y = get();
$y = $y[1];

居然执行成功了!

于是我不解了,为什么连c++都支持的语法,而php里面却不肯支持?

c++的代码如下:


vector foo()
{
vector vec;
vec.push_back(1);
vec.push_back ...

最后更新于 .

好吧,我知道是大半夜……,但我还是觉得赶紧花上半个小时,把这最新的想法分享出来是值得的~直接进入正题~

我们来模拟一个场景,需要你去抓去一个页面,然后这个页面有好多url也要分别去抓取,而进入这些子url后,还有数据要抓取。简单点,我们就按照三层来看,那我们的代码就是如下:


def func_top(url):
data_dict= {}

#在页面上获取到子url
sub_urls = xxxx

data_list = []
for it in sub_urls:
data_list.append(func_sub(it))

data_dict['data'] = data_list

return data_dict

def func_sub(url):
data_dict= {}

#在页面上获取到子url
bottom_urls = xxxx

data_list = []
for it in bottom_urls:
data_list.append(func_bottom(it))

data_dict['data'] = data_list

return data_dict ...

每日归档

上个月

2011年3月

下个月

2011年5月

归档