import requests
import threading
import time
import queue as queue
# url列表,這裡是虛構的,現實情況這個列表裡有大量的url
link_list = ['',
'','',
'','',
'...']
start = time.time()
class mythread(threading.thread):
def __init__(self,name,q):
threading.thread.__init__(self)
self.name = name
self.q = q
def run(self):
print("starting " + self.name)
while true:
try:
crawler(self.name,self.q)
except:
break
print("exiting " + self.name)
def crawler(threadname,q):
# 從佇列裡獲取url
url = q.get(timeout=2)
try:
r = requests.get(url,timeout = 20)
# 列印:佇列長度,執行緒名,響應嗎,正在訪問的url
print(q.qsize(),threadname,r.status_code,url)
except exception as e:
print(q.qsize(),threadname,"error: ",e)
# 建立5個執行緒名
threadlist = ["thread-1","thread-2","thread-3","thread-4","thread-5"]
# 設定佇列長度
workqueue = queue.queue(300)
# 執行緒池
threads =
#建立新執行緒
for tname in threadlist:
thread = mythread(tname,workqueue)
thread.start()
#將url填充到佇列
for url in link_list:
workqueue.put(url)
#等待所有執行緒完成
for t in threads:
t.join()
end = time.time()
print('queue多執行緒爬蟲總時間為:',end-start)
print('exiting main thread')
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
多執行緒訪問DataTable
專案中需要讀取資料庫中的多張表。由於表的資料比較多,序列讀取時耗時比較多,所以對程式做了一點優化。環境.net 3.5,sql server 2012,visual studio 2015 過程專案中使用儲存過程序列地讀取資料庫,儲存過程接受同乙個表變數作為引數。但是當在多執行緒中複製datatab...
多執行緒同步案列
當乙個執行緒進入乙個物件的synchronize方法後,其他執行緒同樣可以訪問該物件的非synchronize的方法 如下 class test1 catch interruptedexception e system.out.println 結束synchronize方法 public void ...