python的多线程坑坑不断… …

python的threading因为封装的太好, 很多本源的东西在threading对象里是拿不到的.  首先需要说明的是python threading的name跟ident,这些看起来是线程名字,线程id其实只是个标识,注意是标识而已.  简单过了下threading创建对象及启动线程的代码,发现ident跟pstree查到的线程id是两码事. 

该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新http://xiaorui.cc/?p=3017

我在 stackoverflow 查询到了一些关于pyhton线程id的获取方式,但大多数人其实对线程id是不关心的,他们会利用threading给予的threading.currentThread().ident threading.currentThread().name来识别线程.  最后在查到一老外写的使用ctypes调用系统的动态链接库libc.so.6 来获取线程id的方法, 当然事实证明是有效果的. 


老外的连接 http://blog.devork.be/2010/09/finding-linux-thread-id-from-within.html

ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数. 我对这个ctypes理解也不深入,在以前的项目中用过,表示有些粗暴.

废话不多说, 直接上python ctypes样例,关于这186,224,178不知道啥意思.


下面是python threading获取线程id的实例代码:


这是上面py代码运行后的结果,  跟我们预期的效果一致.


可以另起一个终端使用pstree -p pid看看是否正确.  


那么我们费尽心思取到python的线程id是为了什么?  strace -p pid/线程 的状态.  可以看到24831线程正在建立google.com的连接, 很明显这连接被拒了.


END.  下次有时间在专门瞅瞅python ctypes的用法. 



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

不要粗暴的销毁python线程

前言:     不要试图用强制方法杀掉一个python线程,这从服务设计上就存在不合理性。 多线程本用来任务的协作并发,如果你使用强制手段干掉线...

阅读全文

源码分析multiprocessing的Value Array共享内存原理

这次我们通过分析python的multiprocessing的源码,来看看Value Array怎么通过mmap ctypes实现的多进程之间的共享内存.      当...

阅读全文