小编rpb*_*ear的帖子

使用python处理许多巨大的日志文件

我正在使用一些python脚本来进行统计.一种日志内容就像这样我称之为日志:每个日志的格式为:

[2012-09-12 12:23:33] SOME_UNIQ_ID filesize
Run Code Online (Sandbox Code Playgroud)

我称之为另一个日志B日志的格式为:

[2012-09-12 12:24:00] SOME_UNIQ_ID
Run Code Online (Sandbox Code Playgroud)

我需要计算A日志中有多少记录也在B日志中,并获得具有相同记录ID的两个记录的时间间隔.我的实现是将所有时间和B日志的ID加载到地图中,然后迭代A日志检查它的ID是否存在于地图中.问题是它投入太多内存因为我在B log中有近1亿条记录.有什么建议可以提高性能和内存使用率吗?谢谢.

python logging

6
推荐指数
1
解决办法
790
查看次数

为什么exec.Start()创建的进程如果其父节点被SIGINT杀死则退出?

我在golang中发现了一个奇怪的问题.exec.Start()如果父程序被信号os.Interrupt中断,则执行的程序将退出,而如果父程序正常退出则子程序不会退出.这两个条件之间有什么区别?举些例子:

package main

import "fmt"
import "os"
import "time"
import "os/exec"

func main(){
    cmd := exec.Command("sleep", "100000")
    cmd.Env = os.Environ()
    fmt.Println(cmd.Env)
    cmd.Start()

    time.Sleep(1e9*20)
    return
} 
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,如果我们不中断主程序,则父级sleep 100000将是20 init process后.

linux fork signals exec go

5
推荐指数
1
解决办法
1475
查看次数

装载点归属

我正在阅读docker的源代码,并检查是否已经通过这样的测试条件安装了一个目录,它背后的原理是什么?

func Mounted(mountpoint string) (bool, error) {
    mntpoint, err := os.Stat(mountpoint)
    if err != nil {
        if os.IsNotExist(err) {
                return false, nil
        }
        return false, err
    }
    parent, err := os.Stat(filepath.Join(mountpoint, ".."))
    if err != nil {
        return false, err
    }
    mntpointSt := mntpoint.Sys().(*syscall.Stat_t)
    parentSt := parent.Sys().(*syscall.Stat_t)
    return mntpointSt.Dev != parentSt.Dev, nil
}
Run Code Online (Sandbox Code Playgroud)

linux mount go linux-kernel

5
推荐指数
1
解决办法
301
查看次数

使用python将字符串时间戳转换为纪元时间的最快方法是什么?

我需要从像'2012-09-08 12:23:33'那样的字符串时间戳进行大量的对话,以秒为基础,这是基于纪元时间.然后我需要在两个时间戳之间得到时间差.我尝试了两种不同的方式:

date1 = '2012-09-08'
time2 = '12:23:33'
timelist1 = map(int, date1.split('-') + time1.split(':'))

date2 = '2012-09-08'
time2 = '12:23:33'
timelist2 = map(int, date2.split('-') + time2.split(':'))
delta = datetime.datetime(*timelist2) - datetime.datetime(*timelist1)
print delta.seconds
Run Code Online (Sandbox Code Playgroud)

第二种方式是:

date1 = '2012-09-08'
time1 = '12:23:33'
d1 = datetime.datetime.strptime(date1 + ' ' + time1, "%Y-%m-%d %H:%M:%S")
seconds1 = time.mktime(d1.timetuple())
....
seconds2 = time.mktime(d2.timetuple())
print seconds2-deconds1
Run Code Online (Sandbox Code Playgroud)

然而,这两种方式还不够快,因为我有近1亿行动要做.有什么建议吗?

python

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

如何安装最新版本的redis?

我正在尝试安装redis.2.6.0-rc7因为我需要BITCOUNT命令.我从redis-2.6.0-rc7.tar.gz下载了软件包

当我完成make && make install时,我检查了redis-cli的版本,它显示了

redis-cli 2.5.13
Run Code Online (Sandbox Code Playgroud)

为什么不是2.6.0?

redis

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

指针和数组的区别

我有一段代码,它们有什么区别?第一个,bufstruct 的元素地址比struct的大4,而第二个不是.

第一

#include <stdio.h>

typedef struct A
{
    int i;
    char buf[];  //Here
}A;

int main()
{
    A *pa = malloc(sizeof(A));
    char *p = malloc(13);
    memcpy(p, "helloworld", 10);
    memcpy(pa->buf, p, 13);

    printf("%x %x %d %s\n", pa->buf, pa, (char *)pa->buf - (char *)pa, pa->buf);
}
Run Code Online (Sandbox Code Playgroud)

第二

typedef struct A
{
    int i;
    char *buf; //Here
}A;
Run Code Online (Sandbox Code Playgroud)

c

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

标签 统计

go ×2

linux ×2

python ×2

c ×1

exec ×1

fork ×1

linux-kernel ×1

logging ×1

mount ×1

redis ×1

signals ×1