python 多執行緒訪問url列表中位址

2021-08-25 08:53:12 字數 1417 閱讀 4043

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 ...