Python3加载一个动态库并实现线程并行

Python3加载一个动态库并实现线程并行,第1张

概述Python3加载一个动态库并实现线程并行 前言 在学习Python的过程遇到GIL,然后为了解决cpython解释器带来的问题,就写了一个简单的demo。目的:使用线程进行并行充分挥发cpu的性能。GIL 全局解释器锁 表现形式 2个线程占用的资源率加起来是一个cpu,因为线程是并发的形式。2个进程占用的资源率加起来是二个cpu,因为进程是并行的形式。原因 保证同一时刻只有一个线程可以执行代码,所以每个线程的执行过程都需要先获得GIL在遇到IO *** 作等可能会引起阻塞的 *** 作时,会自动切换线程实现并发效果GIL只对线程有影响,进程、协程并不受GIL影响。python语言与GIL没有直接关系,仅仅是由于历史原因GIL只存在cpython解释器扩展

多线程爬虫是否比单线程性能高?

是的线程释放GIL锁的情况: 在IO *** 作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在其他线程释放GIL后,必须重新获取GIL在python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁

任务类型

计算密集型 其特点是要进行大量的计算,消耗cpu资源比如计算圆周率、对视频进行高清解码等等,全靠cpu的运算能力IO密集型 涉及到网络、磁盘IO的任务都是IO密集型任务这类任务的特点是cpu消耗很少,任务的大部分时间都在等待IO *** 作完成(因为IO的速度远远低于cpu和内存的速度)。常见的大部分任务都是IO密集型任务,比如Web应用数据密集型 大量独立的数据分析处理作业可以分布在松耦合的计算机集群系统的不同节点上运行高度密集的海量数据I/O吞吐需求大部分数据密集型应用都有个数据流驱动的流程加载一个动态库并实现线程并行 1.创建一个loop.c程序
// 一个简单的死循环voID DeadLoop(){	while(1)	{		;	}}
2.将C语言编译成一个动态库
gcc loop.c -shared -o libdead_loop.so

在linux下执行以上命令后,当前目录下会出现一个libdead_loop.so文件

3.创建一个main.py程序 导入ctypes模块然后加载动态库创建子线程调用动态库
from ctypes import *from threading import Thread# 加载动态库lib = cdll.Loadlibrary("./libdead_loop.so")# 创建一个子线程,调用动态库t = Thread(target=lib.DeadLoop)t.start()# 主进程while True:	pass
4.查看结果

htop


加载一个动态库并实现线程并行完成!

总结

以上是内存溢出为你收集整理的Python3加载一个动态库并实现线程并行全部内容,希望文章能够帮你解决Python3加载一个动态库并实现线程并行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1013015.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)