使用直接呼叫檔案入口作為程式的起點

2021-09-22 03:55:48 字數 1572 閱讀 9389

使用直接呼叫檔案入口作為程式的起點

if__name__ =="__main__": 

main()

注意,這一句並不代表如果該if之前有其他直接暴露出來的**時,他會首先執行。

該if語句只是代表順序執行到這句話時進行判斷呼叫者是誰,若是直接執行的該檔案,則進入結構,若是其他檔案呼叫,那就跳過。

多執行緒仔細想想就可以發現,其實爬10頁(每頁25本),這10頁爬的先後關係是無所謂的,因為寫入的時候沒有依賴關係,各寫各的,所以用序列方式爬取是吃虧的。顯然可以用併發來加快速度,而且由於沒有同步互斥關係,所以連鎖都不用上。

正如引用博文所說,由於問題的特殊性,我用了與之相似的較為直接的直接分配給各個執行緒不同的任務,而避免了執行緒互動導致的其他問題。

我的**中多執行緒的核心**不多,見下。

呼叫執行緒庫threading,向threading.thread()類中傳入要用執行緒執行的函式及其引數。

執行緒列表依次新增對應不同引數的執行緒,pagelist[i],step兩個引數是關鍵,我是分別為每個執行緒分配了不同的頁面鏈結,這個地方我想了半天,最終使用了一些數學計算來處理了一下。

同時也簡單試用了下列表生成式:

pagelist = [x for x in range(0, pagenum, step)]

這個和下面是一致的:

threading.thread的幾個方法

值得參考:多執行緒

start() 啟動執行緒

jion([timeout]),依次檢驗執行緒池中的執行緒是否結束,沒有結束就阻塞直到執行緒結束,如果結束則跳轉執行下乙個執行緒的join函式。在程式中,最後join()方法使得當所呼叫執行緒都執行完畢後,主線程才會執行下面的**。相當於實現了乙個結束上的同步。這樣避免了前面的執行緒結束任務時,導致檔案關閉。

注意使用多執行緒時,期間的延時時間應該設定的大些,不然會被**拒絕訪問,這時你還得去豆瓣認證下"我真的不是機械人"(尷尬)。我設定了10s,倒是沒問題,再小些,就會出錯了。

完整**

效率有提公升

對應的單執行緒程式在github上。單執行緒:

可見時間超過30分鐘。修改後時間縮短到了11分鐘。

檔案截圖

元件類原始檔的直接使用

問題 在工程中新建乙個資料夾mycontrols 把cs檔案和resx檔案以及design.cs檔案都新增到該資料夾去 別忘了把cs檔案中需要呼叫的bmp檔案新增到工程的resources資料夾下 在程式中 using mycontrols typea controla new typea cont...

C 直接呼叫IE開啟指定的網頁檔案

之前在一級的專案中遇到了乙個問題,就是其他的系統需要用谷歌的瀏覽器作為支援,而我們的系統是需要ie瀏覽器做支援的,另外我們的頁面都是在本地的所以可以由指定瀏覽器開啟,所以有了這個研究,這對於軟體和系統的支援也有很多幫助。一 所需環境 net環境 需要引用system.diagnostics這個命名空...

檢視呼叫DLL的程式及Kill DLL檔案

以server.dll為例。如果想刪除這個dll檔案,可是系統告訴你使用中,首先要知道什麼程式在使用這個dll檔案。開始 執行 cmd 輸入命令 tasklist m c 1.txt 命令執行完成後,在c盤下找到1.txt這個檔案,ctrl f查詢dll名字,這裡是server 這樣就能看到是哪個程...