進(jìn)程
(1)由于Python當(dāng)初全局解釋器鎖的設(shè)計(jì)稚疹,導(dǎo)致了Python的使用線程的場(chǎng)合好像比較固定挽荠。
(2)大部分使用比較多的是進(jìn)程香浩,但是開銷上進(jìn)程肯定更大雷滋。但是針對(duì)日常的一些腳本的使用不撑,簡(jiǎn)單的爬蟲來說文兢,都OK了。
(1)主要方法
from multiprocessing import Process, Pool, cpu_count
import os
# 獲取進(jìn)程pid:
os.getpid()
# 開始焕檬、結(jié)束姆坚、等待
p.start()
p.close()
p.join() # 等待子進(jìn)程結(jié)束之后再繼續(xù)執(zhí)行。
(2)簡(jiǎn)單Demo
# 調(diào)用子進(jìn)程
p = Process(target=func_name, args=('arg1', 'arg2'...)) # 這里面的參數(shù)指的是傳入的func中會(huì)用到的參數(shù)
p.start()
p.join()
# 進(jìn)程池
p = Pool(cpu_count())
for i in range(5):
p.apply_async(long_time_task, args(i, ))
p.close()
p.join()
(3)子進(jìn)程
線程的進(jìn)程之間的最大區(qū)別:
多線程和多進(jìn)程最大的不同在于:
?
(1)多進(jìn)程中实愚,同一個(gè)變量兼呵,各自有一份拷貝存在于每個(gè)進(jìn)程中,互不影響腊敲,
(2)而多線程中击喂,所有變量都由所有線程共享,所以碰辅,任何一個(gè)變量都可以被任何一個(gè)線程修改茫负,
因此,線程之間共享數(shù)據(jù)最大的危險(xiǎn)在于多個(gè)線程同時(shí)改一個(gè)變量乎赴,把內(nèi)容給改亂了。