Python, GIL, ctypes, Jython 多线程

最近做项目要用到多线程,作为菜鸟,对python的多线程不是很了解,在查找了多方面的资料之后稍微有了一点收获,在这里做一下记录,也可以方便遇到同样问题的同学。


对于Python的多线程,首先需要了解GIL(Global Interpreter Lock),下面的这篇内容很不错:

《Python的GIL是什么鬼,多线程性能究竟如何》


读完上面这篇文章之后你会发现,哦原来Python的多线程用起来是有限制的:

1.对于IO密集型任务,Python的多线程能发挥很好的作用

2.而对于CPU密集型任务,由于GIL的存在,Python的多线程并不能达到想要的效果


对我的项目而言,需要处理的是CPU密集型任务,又必须使用多线程,又不想放弃Python简洁的代码。这种情况下只有两种方案:

1.在Pyhon中通过ctypes加载外部的C的动态链接库:

通过这种方式可以使python代码在执行到ctypes调用C的函数时将GIL释放。我们可以通过一个小程序测试一下:


在VS中创建 ThreadUsedCount.cpp:

#include "stdio.h"

extern "C" __declspec(dllexport) void ThreadUsedCount()
{
	int i = 0;
	while (1)
	{
		i += 1;
	}
}
之后在Visual Studio command prompt中输入一下命令来生成 ThreadUsedCou nt.dll:

1.cl /c ThreadUsedCount.cpp

2.link /dll ThreadUsedCount.obj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值