日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

多线程 全局变量_python高级:6.多线程part1

發布時間:2023/12/15 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程 全局变量_python高级:6.多线程part1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0.前言

如果可以的話,請先關注(專欄和賬號),然后點贊和收藏,最后學習和進步。你的支持是我繼續寫下去的最大動力,個人定當傾囊而送,不負眾望。謝謝!!!

1.前提

基于win10專業版64位系統+64位jdk1.8+64位python3.6.5+社區版pycharm2018.1.3+unittest+selenium3.141.0。

要學好自動化測試,我們先從python語言基礎開始學習,一步一個腳印,欲速則不達哦!

2.線程和進程

1)簡介

線程:有時被稱為輕量級進程(Lightweight Process,LWP),是操作系統調度(CPU調度)執行的最小單位。在單個程序中同時運行多個線程完成不同的工作,稱為多線程。

多線程類似于同時執行多個不同程序,多線程運行有如下優點:

a.使用線程可以把占據長時間的程序中的任務放到后臺去處理;

b.用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度;

c.程序的運行速度可能加快。

進程:運行起來的程序。進程需要占用系統資源(內存,CPU)。進程是最小的系統資源分配單位,只是給線程提供執行環境。

注:一個進程可以包含一到多個線程,進程獨享資源,進程包含的線程間共享該進程資源。比如啟動一個QQ對應一個進程,你打開多個聊天窗口與不同人聊天用的就是線程,不同聊天窗口線程之間互不影響,同時共享QQ進程的資源。

這些游戲相信很多人都玩過,里面都是真實的玩家,在你的客戶端電腦上啟動游戲對應游戲里面的一個玩家角色,對于客戶端電腦來說你是一個進程,但對于服務器來說你是一個線程,每個玩家都是線程,所以玩家之間才不會相互影響。

2)基礎語法

僅以線程為例:進程語法類似。

from threading import Thread#線程模塊導包 from multiprocessing import Process#進程模塊導包t1 = Thread(target=method)#創建線程 t1.setDaemon(True)#守護線程:與jion()相反,不等子線程完成繼續執行后面的任務,與主線程一起結束 t1.start()#啟動線程 t1.join()#等待線程:主線程必須等待對應子線程結束才能繼續往下執行

注:程序運行的時候,代碼從上到下從左到右這種運行邏輯就對應進程的主線程(一個進程至少得有一個主線程程),在這個過程中如果遇到定義的其它線程,這些其它線程就叫做子線程。

3)實例

等待線程:

from time import sleep from threading import Thread def method(n):for i in range(1,n+1):print(i)sleep(1) # 為了使后面線程并發時交叉效果更明顯,故添加個等待 if __name__ == '__main__':t1 = Thread(target=method,args=(5,))t1.start()t1.join()#等待線程,主線程到達這里必須等待子線程t1完成才會繼續往下執行print("game over!") # 運行結果: 1 2 3 4 5 game over!

說明:game voer!的打印必須前面的t1線程運行完了才能執行,結果可見上方。

守護線程:

from time import sleep from threading import Thread def method(n):for i in range(1,n+1):print(i)sleep(1) # 為了使后面線程并發時交叉效果更明顯,故添加個等待 if __name__ == '__main__':t1 = Thread(target=method,args=(5,))t1.setDaemon(True)#守護線程,主線程到達這里無需等待子線程t1完成,直接繼續往下執行,主線程結束,對應的守護子線程跟著一起結束t1.start()print("game over!")

說明:game voer!的打印無需等待前面的t1線程運行完成,直接繼續往下,主線程完了,對應的守護子線程跟著一起結束,結果可見上方。

不使用線程打印兩遍1~5:

from time import sleep def method(n):for i in range(1,n+1):print(i)sleep(1)#為了使后面線程并發時交叉效果更明顯,故添加個等待 if __name__ == '__main__':method(5)method(5) #運行結果: 1 2 3 4 5 1 2 3 4 5

使用兩個線程分別打印一遍1~5:

from time import sleep from threading import Thread def method(n):for i in range(1,n+1):print(i)sleep(1)#為了使后面線程并發時交叉效果更明顯,故添加個等待 if __name__ == '__main__':t1 = Thread(target=method,args=(5,))t1.start()t2 = Thread(target=method,args=(5,))t2.start() #運行結果: 1 1 2 2 3 3 4 4 5 5

總結:從以上兩端代碼得出結論,線程可以并發執行。

分別用進程和線程來操作同一個變量,看下結果:

from threading import Thread a = 1 def method():global aa += 1print('函數內部',a) if __name__ == '__main__':t1 = Thread(target=method)#創建一個調用method方法的子線程t1t1.start()#啟動t1線程,實質是給全局變量a加了1,變為2print('函數外部',a)t2 = Thread(target=method)#創建一個調用method方法的子線程t2t2.start()#啟動t2線程,實質是又給全局變量a加了1,變為3print('函數外部',a) # 運行結果: 函數內部 2 函數外部 2 函數內部 3 函數外部 3from multiprocessing import Process a = 1 def method():global aa += 1print('函數內部',a) if __name__ == '__main__':p1 = Process(target=method)#創建一個調用method方法的進程p1p1.start()#啟動p1進程,實質是給全局變量a加了1,變為2print('函數外部',a)p2 = Process(target=method)#創建一個調用method方法的進程p2p2.start()#啟動p2進程,實質是又給全局變量a加了1,變為3print('函數外部',a) # 運行結果: 函數外部 1 函數外部 1 函數內部 2 函數內部 2

總結:以上結果能能說明什么呢?說明進程間獨享資源(包括變量對象),線程間共享資源(包括變量對象的計算結果)。

總結

以上是生活随笔為你收集整理的多线程 全局变量_python高级:6.多线程part1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。