多线程爬虫是否比单线程性能高?
是的线程释放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文件
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加载一个动态库并实现线程并行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)