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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python 多线程总结(1)- thread 模块

發布時間:2023/11/28 生活经验 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 多线程总结(1)- thread 模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

thread 模塊

1. 單線程

首先看下單線程程序運行的例子,如下所示,

import timedef loop0():print 'start loop0 begin', time.ctime()time.sleep(4)print 'start loop0 end', time.ctime()def loop1():print 'start loop1 begin', time.ctime()time.sleep(2)print 'start loop1 end', time.ctime()def main():print 'main is start', time.ctime()loop0()loop1()print 'main is end', time.ctime()if __name__ == '__main__':main()

程序運行結果如下:

'''
main is start Sat Jul 21 19:47:41 2018
start loop0 begin Sat Jul 21 19:47:41 2018
start loop0 end Sat Jul 21 19:47:45 2018
start loop1 begin Sat Jul 21 19:47:45 2018
start loop1 end Sat Jul 21 19:47:47 2018
main is end Sat Jul 21 19:47:47 2018
'''

從運行結果可以看出,函數是按照順序依次執行。運行總時間是各個函數運行的時間總和。

2. 簡單多線程

簡單多線程我們先使用 thread 模塊,下面看個簡單示例

import thread
import timedef loop0():print 'loop0 begin', time.ctime()time.sleep(4)print 'loop0 end', time.ctime()def loop1():print 'loop1 begin', time.ctime()time.sleep(2)print 'loop1 end', time.ctime()def main():print 'main is start', time.ctime()thread.start_new_thread(loop0, ())  # 第一個參數為函數,第二個參數為元組,即使是空值也要寫成空的元組thread.start_new_thread(loop1, ())time.sleep(6)    # 保障其他線程執行完畢后再關閉主進程,此處我們知道最長是6s,如果不知道就需要使用鎖print 'main is end', time.ctime()if __name__ == '__main__':main()

程序運行結果如下:

'''
main is start Sat Jul 21 19:56:50 2018
loop0 begin Sat Jul 21 19:56:50 2018
loop1 begin Sat Jul 21 19:56:50 2018
loop1 end Sat Jul 21 19:56:52 2018
loop0 end Sat Jul 21 19:56:54 2018
main is end Sat Jul 21 19:56:56 2018
'''

從運行結果可以看出,loop0 和 loop1 兩個函數是并行運行的,程序中的 time.sleep(6) 是由于要保障其他線程執行完畢后再關閉主進程,此處我們知道最長是 6s,如果不知道就需要使用鎖。

3. 使用簡單鎖

在本程序中,我們使用簡單的鎖來讓主進程動態地等待子線程執行結束再結束主進程。

import thread
import timeloops = [4, 2]def loop(nloop, nsec, lock):print 'start loop', nloop, 'at:', time.ctime()time.sleep(nsec)print 'stop loop', nloop, 'at:', time.ctime()lock.release()  # 釋放相應的鎖,通知主線程該線程已經退出了def main():print 'main is start at:', time.ctime()locks = []nloops = range(len(loops))for i in nloops:lock = thread.allocate_lock()   # 創建一個鎖列表lock.acquire()  # 分別調用acquire獲得鎖locks.append(lock)for i in nloops:    # 循環創建線程,放到上面循環之后是因為:獲取鎖需要一段時間,有可能出現還沒有獲得鎖,線程就結束的情況thread.start_new_thread(loop,(i, loops[i], locks[i]))for i in nloops:while locks[i].locked():passprint 'main is end at:', time.ctime()if __name__ == '__main__':main()

程序運行結果如下:

'''
main is start at: Sat Jul 21 20:07:08 2018
start loop 0 at: Sat Jul 21 20:07:08 2018
start loop 1 at: Sat Jul 21 20:07:08 2018
stop loop 1 at: Sat Jul 21 20:07:10 2018
stop loop 0 at: Sat Jul 21 20:07:12 2018
main is end at: Sat Jul 21 20:07:12 2018
'''

總結

以上是生活随笔為你收集整理的Python 多线程总结(1)- thread 模块的全部內容,希望文章能夠幫你解決所遇到的問題。

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