爬蟲總結4
阿新 • • 發佈:2018-12-03
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能夠執行協程任務