日常的学习笔记

python项目中写了一个C API扩展,使用Pyobject封装的.  python import的时候总是提示错误,信息如下。

Traceback (most recent call last):
  File “kk.py”, line 3, in <module>
    import timerstack
ImportError: dynamic module does not define init function (inittimerstack)

解决方法:

Python doesn’t and cannot support arbitrary C files as modules. You’ll have to follow certain conventions to let Python know what functions your module supports.

To do so, Python will look for a init<name> function, where <name> is the module name. Python was looking for initfizzbuzz but failed to find it, so loading the module failed.

被Elasticsearch的mapping坑到了,当mapping某个字段跟你插入字段的类型不一样的时候,他不会抛出异常… 


Socket send、recv跟tcp协议的ACK、滑动窗口的关联关系. 


理解linux内核的HZ ,Jiffies , TICK 概念,及xtime jiffies的区别。

HZ的配置可以决定linux下一秒钟可以产生多少个节拍,也就是时钟中断的次数.

JIffies是系统启动后会记录TICK,中断的次数。

TICK是每次中断的间隔时间。

启动启动的时候会从cmos获取时间。//  jiffies推算的时间一般只能到毫秒,而xtime得时间可以到纳秒。

通过Charles 抓取分析https的连接, 通过Charles 来抓取分析一些app中的调用连接。 

首先我们要明确https本身是安全的,而charles能抓取并分析https内容原因是 我们在手机端导入了charles的根证书,这样charles做proxy的时候,完全可以伪造证书,这样就可以劫持应用了。 

Linux在O_APPEND打开文件后,在使用lseek设置了偏移量后,读写会收到啥影响?

O_APPEND open文件之后,每次写文件之前都会把偏移量移到文件的末端,然后写数据,这两个数据是原子性的.   另外这个模式下可以往末端以外的地方写数据么?  不能,因为你是O_APPEND写的文件.    读数据还是没有问题,你想在那个偏移量读都可以。 

使用dup、dup2 实现文件描述符的复制,及IO重定向.

在linux下父子进程是可以传递文件描述符的,通过socketpair创建两个fd来实现的.   另外通过socketpair还可以实现进程间的双向通信。

实现的方法很简单,就是fork子进程之前创建parent, child = socket.socketpair() ,把child fd交给子进程就可以了。  




关于redis主从复制的原理的问题, redis是通过DUMP RDB再send给slave节点的,但RDB的过程中,如果有用户insert数据咋办? 怎么才能避免阻塞工作线程。

说一点大家应该就懂了,Redis在做的RDB和Aof rewrite都是新进程来处理的,既然是fork的子进程肯定是cow写实复制的,子进程只是复制了父进程的页表而已,这个速度是很快的。 但如果父进程的数据有40G (比方),那么子进程光是copy页表也会消耗一点时间的,另外父子进程在修改数据前是共用物理页帧的,当父子有一个修改数据时,才会把具体内容复制给子进程。redis的做法是先注册repl_backlog,然后进行RDB。 这样master会把用户的新指令塞到repl_backlog环形队列里面。



pymongo 太贱了  2.2版本的结构是max_pool_size   3.x的是  maxPoolSize   ,参数的兼容性都没做明白, 刚要到github中骂他,结果还关闭了issue的通道,说是可以到mongo的论坛提issue。 

File "/home/ruifengyun/quantum_migrate/lib/store.py", line 26, in _get_connection
    self._conn = MongoClient(self.host, self.port, maxPoolSize = self.max_pool_size)
  File "/usr/local/lib/python2.7/site-packages/pymongo/mongo_client.py", line 290, in __init__
    option, value = common.validate(option, value)
  File "/usr/local/lib/python2.7/site-packages/pymongo/common.py", line 348, in validate
    value = validator(option, value)
  File "/usr/local/lib/python2.7/site-packages/pymongo/common.py", line 61, in raise_config_error
    raise ConfigurationError("Unknown option %s" % (key,))
pymongo.errors.ConfigurationError: Unknown option maxPoolSize


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

1 Response

发表评论

邮箱地址不会被公开。 必填项已用*标注