亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4020 | 回復(fù): 5
打印 上一主題 下一主題

Perl 異步 寫入行+刪除行 到文件 [復(fù)制鏈接]

論壇徽章:
1
白羊座
日期:2013-11-09 20:03:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-12-13 19:26 |只看該作者 |倒序瀏覽
最近學(xué)習了Perl異步模塊Coro和Perl非阻塞的AnyEvent::HTTP模塊,為了更深入的學(xué)習異步編程思想,準備寫個入門程序。

最合適的就是爬蟲了,我是用Coro的信號控制HTTP請求數(shù)量的,入口是一個網(wǎng)站主頁,只準備抓一個站點。

有一個%root的hash變量,用來將站點的所有URL層次化的保存在%root里面,并保存抓取狀態(tài)(是否已抓取)。

sub URL_add
{
    # $p用于指向%root各個層次的指針
    my $p      = shift;
    my $url    = shift;

    my $is_new = 0;
    my @depths = split '/', $url;
    foreach (@depths){
        # 判斷是否存在相同路徑
        if ( ! $p->{$_} ){
            # 下級永遠保存一個引用
            $p->{$_} = {};
            $is_new  = 1;
        }
        # 指向下一級的引用
        $p = $p->{$_};
    }
    # 標記新路徑或則未標記路徑,'//'代表標記結(jié)尾,值1代表未查詢
    $p->{'//'} = 1 if $is_new || ! $p->{'//'};
}


抓取的URL與該%root匹配,如果已存在就丟棄。

論壇徽章:
1
白羊座
日期:2013-11-09 20:03:00
2 [報告]
發(fā)表于 2013-12-13 19:30 |只看該作者
這里有個問題,如果每次要生成一個新的請求都要重%root里面遍歷一下未請求的網(wǎng)址,然后生成url提交請求。
這樣就產(chǎn)生了一個效率問題,畢竟hash用來判斷URL的請求狀態(tài)是很快的,但是遍歷就沒有優(yōu)勢了。

所以我就想把未請求的網(wǎng)址寫入一個@url里面,不過隨著請求頁面越來越多,@url會達到一個很高的內(nèi)存占用。

終于可以帶出本帖的主題了,將該@url以文件的形式存在硬盤里。

論壇徽章:
1
白羊座
日期:2013-11-09 20:03:00
3 [報告]
發(fā)表于 2013-12-13 19:33 |只看該作者
但是對Perl的文件讀寫機制了解不透。
知道是有讀寫緩存的,這個是我需要的,要不然頻繁的IO會影響效率,讀寫的鎖準備用Coro的信號量簡單判斷一下。

現(xiàn)在我測試下來,是寫入有緩存,讀文件是不會讀到該緩存里面的,問題就在這里了,請問下如何解決這問題呢

論壇徽章:
1
白羊座
日期:2013-11-09 20:03:00
4 [報告]
發(fā)表于 2013-12-13 20:25 |只看該作者
$p->{'//'} = 1 if $is_new || ! $p->{'//'}; 這句錯了應(yīng)該是
$p->{'//'} = 1 if $is_new || ! exists $p->{'//'};

論壇徽章:
1
白羊座
日期:2013-11-09 20:03:00
5 [報告]
發(fā)表于 2013-12-13 21:42 |只看該作者
準備用Coro::Channel模仿緩存,生成兩個列隊一個讀一個寫。

論壇徽章:
0
6 [報告]
發(fā)表于 2014-02-19 19:08 |只看該作者
use Tie::File;
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP