<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      基于線程的并行-Python 并行編程學習筆記(一)

      前言

      最近寫一些模擬集群智能的算法,雖然機制簡單,但是隨著個體的增加,設計的計算量就比較大了,尤其是加上matplotlib進行動態展示,使得運算量驟增,看著畫面也比較卡.之前想把算法轉化成c++代碼,利用qt進行展示,入了坑才發現不是一朝一夕之功??????,沒辦法,還是回到自己熟悉的python上看看能不能優化一下代碼.然后買了<<Python 并行編程-第二版>>這本書從頭學起,希望用兩三個月把這個整個七七八八.我相信我能堅持下去,把這塊骨頭啃明白.算是一個學習筆記吧,加上一些自己的理解,如果有哪位看官看到此文,發現講到不對的地方加以批評指正.

      基于線程的并行

      threading模塊提供的Thread類

      class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
      

      主要的參數就三個:

      • target:線程要執行的目標函數
      • name:線程名
      • args:目標函數的參數
        下面是一個簡單的例子:
      import threading
      import time
      import random
      
      
      def sleep_out(i):
      	print("{}號程序開始執行\n".format(i))
      	num = random.randint(0, 10)
      	time.sleep(num)
      	print("{}號程序休息了{}s\n".format(i,num))
      
      if __name__ == "__main__":
      	threads = []
      	for i in range(10):
      		t = threading.Thread(target=sleep_out, args=(i,), name="thread-{}".format(i))
      		threads.append(t)
      
      	for t in threads:
      		t.start()
      
      	for t in threads:
      		t.join()
      -----------------------------------輸出-----------------------------
      0號程序開始執行
      
      1號程序開始執行
      
      2號程序開始執行
      
      3號程序開始執行
      
      4號程序開始執行
      
      5號程序開始執行
      
      6號程序開始執行
      
      7號程序開始執行
      
      8號程序開始執行
      9號程序開始執行
      
      
      8號程序休息了1s
      
      7號程序休息了4s
      
      6號程序休息了5s
      
      2號程序休息了6s
      
      4號程序休息了7s
      
      0號程序休息了7s
      
      3號程序休息了8s
      
      1號程序休息了10s
      
      9號程序休息了10s
      
      5號程序休息了10s
      
      進程已結束,退出代碼0
      

      線程開始執行使用start()方法,一旦線程開始執行,則運行會轉入后臺,主線程繼續執行.而要等待一個線程結束,必須使用join()方法,該方法會讓主線程進入等待狀態,直到線程執行完畢,主線程才會繼續執行.

      我們將剛才的程序改寫為:

      import threading
      import time
      import random
      
      
      def sleep_out(i):
      	print("{}號程序開始執行\n".format(i))
      	num = random.randint(0, 10)
      	time.sleep(num)
      	print("{}號程序休息了{}s\n".format(i,num))
      
      if __name__ == "__main__":
      	threads = []
      	for i in range(10):
      		t = threading.Thread(target=sleep_out, args=(i,), name="thread-{}".format(i))
      		threads.append(t)
      		t.start()
      		t.join()
      -----------------------------------輸出-----------------------------
      0號程序開始執行
      
      0號程序休息了6s
      
      1號程序開始執行
      
      1號程序休息了6s
      
      2號程序開始執行
      
      2號程序休息了8s
      
      3號程序開始執行
      
      3號程序休息了0s
      
      4號程序開始執行
      
      4號程序休息了5s
      
      5號程序開始執行
      
      5號程序休息了1s
      
      6號程序開始執行
      
      6號程序休息了8s
      
      7號程序開始執行
      
      7號程序休息了8s
      
      8號程序開始執行
      
      8號程序休息了10s
      
      9號程序開始執行
      
      9號程序休息了9s
      
      
      進程已結束,退出代碼0
      

      start()方法和join()方法相輔相成,一般不能獨立存在.

      確定當前線程

      使用currentThread().getName()方法會返回當前線程名.
      繼續在剛才的代碼上修改:

      import threading
      import time
      import random
      
      
      def sleep_out(i):
      	print("{}號程序開始執行\n".format(i))
      	print("當前線程為"+threading.currentThread().getName())
      	num = random.randint(0, 10)
      	time.sleep(num)
      	print("{}號程序休息了{}s\n".format(i,num))
      
      if __name__ == "__main__":
      	threads = []
      	for i in range(10):
      		t = threading.Thread(target=sleep_out, args=(i,), name="thread-{}".format(i))
      		threads.append(t)
      		t.start()
      		t.join()
      -----------------------------------輸出-----------------------------
      0號程序開始執行
      
      當前線程為thread-0
      0號程序休息了2s
      
      1號程序開始執行
      
      當前線程為thread-1
      1號程序休息了2s
      
      2號程序開始執行
      
      當前線程為thread-2
      2號程序休息了3s
      
      3號程序開始執行
      
      當前線程為thread-3
      3號程序休息了1s
      
      4號程序開始執行
      
      當前線程為thread-4
      4號程序休息了3s
      
      5號程序開始執行
      
      當前線程為thread-5
      5號程序休息了1s
      
      6號程序開始執行
      
      當前線程為thread-6
      6號程序休息了2s
      
      7號程序開始執行
      
      當前線程為thread-7
      7號程序休息了1s
      
      8號程序開始執行
      
      當前線程為thread-8
      8號程序休息了1s
      
      9號程序開始執行
      
      當前線程為thread-9
      9號程序休息了4s
      
      
      進程已結束,退出代碼0
      

      自定義線程類

      我們可以創建繼承Thread類的子類,再重新定義run()方法,實現自己需要的功能.
      示例如下:

      import time
      import threading
      from random import randint
      import os
      
      
      def sleep_out(num):
      	time.sleep(num)
      
      
      class MyThreadClass(threading.Thread):
      	def __init__(self, name, duration):
      		threading.Thread.__init__(self)
      		self.name = name
      		self.duration = duration
      
      	def run(self):
      		print("線程:" + self.name + "正在運行, 進程ID:" + str(os.getpid()))
      		sleep_out(self.duration)
      		print("線程" + self.name + "結束!!!")
      
      
      if __name__ == "__main__":
      	start_time = time.time()
      	threads = []
      	for i in range(10):
      		t = MyThreadClass(name="thread-{}".format(i), duration=randint(0, 5))
      		threads.append(t)
      
      	for t in threads:
      		t.start()
      
      	for t in threads:
      		t.join()
      
      	print("-----{}-----".format(time.time() - start_time))
      ----------輸出----------
      線程:thread-0正在運行, 進程ID:11804
      線程thread-0結束!!!
      線程:thread-1正在運行, 進程ID:11804
      線程:thread-2正在運行, 進程ID:11804
      線程:thread-3正在運行, 進程ID:11804
      線程:thread-4正在運行, 進程ID:11804
      線程:thread-5正在運行, 進程ID:11804
      線程:thread-6正在運行, 進程ID:11804
      線程:thread-7正在運行, 進程ID:11804
      線程:thread-8正在運行, 進程ID:11804
      線程:thread-9正在運行, 進程ID:11804
      線程thread-6結束!!!線程thread-8結束!!!
      線程thread-5結束!!!
      
      線程thread-7結束!!!
      線程thread-9結束!!!
      線程thread-2結束!!!線程thread-3結束!!!
      
      線程thread-1結束!!!線程thread-4結束!!!
      
      -----5.019770860671997-----
      
      posted @ 2021-12-21 21:59  DGON  閱讀(49)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 芳草地社区在线视频| 亚洲偷偷自拍码高清视频| 欧美日韩人成综合在线播放| h无码精品动漫在线观看| 内射囯产旡码丰满少妇| 亚洲天堂亚洲天堂亚洲色图| 真人性囗交视频| 国产成人8X人网站视频| 国产午夜精品理论大片| 国产精品视频亚洲二区| 天堂av资源在线免费| 给我中国免费播放片在线| 亚洲人精品午夜射精日韩| 国产成人精品18| 国产精品视频免费一区二区三区| 中国大陆高清aⅴ毛片| 日本一本无道码日韩精品| 少妇人妻偷人偷人精品| 国产精品女人毛片在线看| 少妇被粗大猛进进出出| 成人午夜污一区二区三区| 久久这里精品国产99丫E6| 老太脱裤子让老头玩xxxxx| 98精品全国免费观看视频| 国产午夜福利短视频| 线观看的国产成人av天堂| 91中文字幕一区二区| 2019久久久高清日本道| 少妇人妻av毛片在线看| 国产色无码专区在线观看| 国产婷婷综合在线视频中文| 国产无套精品一区二区三区| 亚洲成亚洲成网| 亚洲区一区二区三区亚洲| 日韩深夜免费在线观看| 久久96国产精品久久久| 狠狠色丁香婷婷综合尤物| 国产精品久久久午夜夜伦鲁鲁| 国产成人午夜福利院| 亚洲国产综合性亚洲综合性| 国内精品视频区在线2021|