楼主: 时光永痕
797 0

[数据挖掘新闻] Python多线程与多处理 [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)三级

35%

威望
0
论坛币
26 个
通用积分
49.7576
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34070 点
帖子
2731
精华
0
在线时间
316 小时
注册时间
2020-7-21
最后登录
2024-4-19

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
Python多线程与多处理
Python中有一个称为线程的库 ,它使用线程(而不只是进程)来实现并行性。如果您了解Python的Global Interpreter Lock或GIL,这可能是令人惊讶的消息 ,但是它实际上在某些情况下可以很好地工作而不会违反GIL。这一切都没有任何开销-只需定义发出I / O请求的功能,系统即可处理其余的功能。
全局翻译锁
全局解释器锁通过一次只允许一个本机线程执行,从而降低了Python(更确切地说是CPython)中线程的有用性 。这使得在(通常是线程不安全的)C库中实现Python更加容易实现,并且可以提高单线程程序的执行速度。但是,它仍然存在争议,因为它阻止了真正的轻量级并行性。您可以实现并行性,但是它需要使用多重处理,这由同名的库 multiprocessing实现。该库不使用线程,而是使用绕过GIL的进程。
看起来,GIL会杀死Python多线程,但效果不佳。通常,多线程有两个主要用例:
在单台计算机上利用多个内核
利用I / O延迟来处理其他线程
通常,我们不能从(1)的线程中受益,但可以从(2)的中受益。
多处理
通用 threading 库是相当低级的,但事实证明它是将其 multiprocessing 包装起来的 multiprocessing.pool.ThreadPool,它方便地采用与相同的接口 multiprocessing.pool.Pool。
使用的好处之一 threading 是可以避免酸洗。多处理依赖于内存中的酸洗对象将其发送到其他进程。例如,如果 timed 装饰没有 wraps 了 wrapper 它返回的函数,那么CPython中就能够咸菜我们的功能 request_func ,并 selenium_func 因此这些不能多处理。相比之下,该 threading 库即使通过 multiprocessing.pool.ThreadPool 工作也很好。多处理还需要更多的内存和启动开销。
分析
我们分析了高度依赖I / O的任务,即对随机的维基百科页面发出100个URL请求。我们比较一下:
Python 请求 模块和
带有 PhantomJS的Python 硒。
我们以三种方式运行这些请求,并测量每次获取所需的时间:
串联
在threading 具有10个线程的池中并行
在multiprocessing 具有10个线程的池中并行
每个请求都是定时的,我们比较结果。
结果
首先,for的每线程运行时间 requests 明显少于for  selenium,因为后者需要启动一个新进程来运行 PhantomJS 无头浏览器。还有趣的是,各个线程(尤其是硒线程)的串行运行速度比并行运行速度快,这是典型的带宽与延迟之间的权衡。
尤其是,硒线程的速度要慢两倍以上,这很可能是由于10个硒工艺一次旋转导致的资源争夺。
同样, 与串行相比,多线程时所有线程的selenium 请求运行速度大约快4倍,请求运行速度 大约快8倍 requests。
结论
使用threading 和 之间没有明显的性能差异 multiprocessing。多线程和多处理之间的性能极为相似,确切的性能细节可能取决于您的特定应用程序。穿线 multiprocessing.pool.ThreadPool 真的很容易,或者至少和使用multiprocessing.pool.Pool 界面一样容易 -只需将I / O工作负载定义为一个函数,然后使用 ThreadPool 即可并行运行它们。
1
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 多线程 Processing Interpret processI

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 23:41