我正在使用一些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亿条记录.有什么建议可以提高性能和内存使用率吗?谢谢.
我在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后.
我正在阅读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) 我需要从像'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亿行动要做.有什么建议吗?
我正在尝试安装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?
我有一段代码,它们有什么区别?第一个,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)