python爬虫】 写爬虫使用多进程好,还是用多线程好?

2020-05-09 09:08发布

5条回答
汽水味的小盆友
2021-11-01 16:28

 首先对于线程和进程,我们知道一个进程中的多个线程之间的共享内存的,即线程没有自己的独立内存,但是进程是有自己的独立内存的,即进程之间是相互独立的,进程之间要交流通信需要通过特定的方式,而不能像线程一样共享对象状态来实现交流。由于进程有自己的独立内存,因此当在一个进程中创建子进程的时候,那么子进程是会复制父进程的状态以及全局对象的,这样多进程就会消耗额外的内存,特别是当主进程本身就有比较占用内存的对象时,那么多进程是会相当消耗内存的。对于python下多进程在操作系统层面的创建方式,在unix下,其直接在当前主进程的状态下新建一个分支,并独立运行,而在windows下,会先将子进程对象中的目标函数其参数通过pickle进行序列化,保存在内存中,然后再通过管道把序列化后的对象传输给新的子进程中,进行反序列化并通过导入目标函数和参数所在的模块以重构对象,这一点需要在windows下python多进程编程中着重注意,要清楚pickle机制,不然容易写出bug。

python线程和进程之间最为关注的区别在于,python多线程由于GIL的限制,不能实现真正的并行,但是进程可以实现真正的并行。GIL是全局解释器锁,即在一个进程中,也就是一个python解释器下,同一时刻只能有一个线程在工作,所以对于多核cpu来说,单纯的多线程并不能充分的利用cpu资源,这也往往是在python中利用多进程的动机。由于每个进程是有独立的python解释器的,因此每个进程有自己的全局解释器锁,所以多进程之间不会受GIL的限制,进而可以利用多进程来实现真正的并行,充分利用多核CPU资源。



一周热门 更多>