python因gil的設計使得單cpu同一時刻只能執行乙個執行緒,所以多執行緒在python中主要用於io較多的場景。前段時間需要採集一些免費ip**,就應用多執行緒對採集來的**進行目標**的連通性進行批量驗證。
python通過兩個標準庫thread和threading提供對執行緒的支援。thread提供了低階別的、原始的執行緒以及乙個簡單的鎖。
threading 模組提供的其他方法:
threading.currentthread(): 返回當前的執行緒變數。
threading.enumerate(): 返回乙個包含正在執行的執行緒的list。正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒。
threading.activecount(): 返回正在執行的執行緒數量,與len(threading.enumerate())有相同的結果。
除了使用方法外,執行緒模組同樣提供了thread類來處理執行緒,thread類提供了以下方法:
run(): 用以表示執行緒活動的方法。
start():啟動執行緒活動。
join([time]): 等待至執行緒中止。這阻塞呼叫執行緒直至執行緒的join() 方法被呼叫中止-正常退出或者丟擲未處理的異常-或者是可選的超時發生。
isalive(): 返回執行緒是否活動的。
getname(): 返回執行緒名。
setname(): 設定執行緒名。
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#import ......
defmt_validate
(ip, port, target_urls):
""" param:ip:
param:port:
param:target_urls: list
return:
"""for i in len(target_urls):
exec('validate%d = 0' %i)
for i, target_url in enumerate(target_urls):
try:
r = requests.get(target_url, proxies=, timeout=8 , headers={})
except exception:
pass
else:
if r.status_code == 200:
exec('validate%d = 1' %i)
validate = reduce(lambda x, y: x+y, [eval('validate%d' %i) for i in len(target_urls)])
#if validate!='0'*len(target_urls):
#......
#......
while
true:
if threading.active_count() < 200:
t = threading.thread(target=mt_validate, args=(ip, port))
t.start()
logging.log(threading.active_count())
break
else:
time.sleep(0.3)
python多執行緒採集例項
python多執行緒採集例項 python作為一種流行的指令碼程式語言,其功能的強大自然不言而喻,豆瓣網就是使用python開發的,另外很多的it公司了在使用python,也充分說明了python的強大,下面是python多執行緒採集例項 python多執行緒採集例項 coding gb2312 a...
pthreads多執行緒資料採集
以前使用curl的多執行緒並不是真正的多執行緒,只是一種模擬的多執行緒,現在使用pthreads來實現真正意義上的多執行緒。windows下 mac unix linux下 安裝方式 windows下 解壓得到pthreadvc2.dll和php pthreads.dll檔案,把vc2檔案放到php...
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...