1. 程式人生 > >爬蟲總結4

爬蟲總結4

1. 多執行緒

from threading import Thread

t = Thread(target=func, args=(引數1,))
t.setDaemon(True) # 守護執行緒
t.start()

class ThreadClass(Thread):
	def run(self): pass
ThreadClass().start()

2. Queue佇列

q = Queue()
q.put_nowait(i) 
q.put(i) # q.put(i, Fasle)
q.get_nowait() 
q.get() # q.get(False)
q.qsize() 
q.join()
	# 呼叫q.join()會阻塞當前執行緒或程序
	# 直到q的計數為0才停止阻塞
	# 發生put動作併成功,計數+1
	# 呼叫一次q.task_done(),計數就-1
q.task_done()

3. 多程序

from multiprocessing import Process

p = Process(target=func, args=(引數1,))
p.daemon = True # 設定守護程序
p.start()

class ProcessClass(Process):
	def run(self): pass
ProcessClass().start()

4. 執行緒池

from multiprocessing.dummy import Pool
pool = Pool(n) # 預設n=os.cpu_count() or 1
pool.apply_async(func, callback=_callback)
pool.close()
# 回撥函式_callback中必須接受func函式的返回值作為引數

5. 協程池

import gevent.monkey
gevent.monkey.patch_all() # 打補丁
from gevent.pool import Pool
pool = Pool(n) # 預設是1
pool.apply_async(func, callback=_callback)
# 回撥函式_callback中必須接受func函式的返回值作為引數
# 協程池沒有close方法
# 主程序要在合適地方sleep,讓cpu能夠執行協程任務