python中多線程使用

前言

記錄下Python中多線程使用


標題

  • 前言
  • 簡介
  • 使用demo

簡介

Python 中的多線程主要通過 threading 模塊來實現。多線程是一種并發編程的方式,允許程序在同一時間執行多個線程,每個線程執行不同的任務。然而需要注意的是,在 Python 中由于 GIL(全局解釋器鎖)的存在,多線程并不適用于 CPU 密集型任務,因為 GIL 會導致在任意時刻只有一個線程在解釋器中執行 Python 字節碼。

下面是 Python 中多線程的基本介紹:

  1. 創建線程
    • 使用 threading.Thread 類可以創建一個新的線程對象。需要提供一個目標函數(通常是一個普通函數)作為線程的執行體。
    • 通過調用 start() 方法啟動線程。
import threadingdef my_function():print("This is my function")thread = threading.Thread(target=my_function)
thread.start()
  1. 線程對象方法

    • start():啟動線程。
    • join([timeout]):等待線程執行結束。可選的超時參數可以指定最長等待時間。
    • is_alive():檢查線程是否還在運行。
    • name:線程的名稱,可以通過屬性進行設置和獲取。
    • ident:線程的標識符,是一個唯一的整數。
  2. 線程間通信

    • 多個線程之間可以通過共享變量來進行通信。然而需要注意的是,在多線程編程中需要考慮線程安全問題,例如使用鎖機制來保護共享資源。
  3. 線程同步

    • Python 提供了一些同步工具來幫助線程間進行同步,比如 LockSemaphoreEventCondition 等。
import threadinglock = threading.Lock()def safe_increment():with lock:# 使用鎖來保護臨界區global countercounter += 1
  1. 線程池
    • 可以使用 concurrent.futures.ThreadPoolExecutor 類來創建一個線程池,用于管理和調度多個線程。
import concurrent.futuresdef my_function():print("This is my function")with concurrent.futures.ThreadPoolExecutor() as executor:executor.submit(my_function)

總的來說,Python 中的多線程提供了一種方便的方式來進行并發編程,可以用于處理 I/O 密集型任務和并發執行多個任務。然而,由于 GIL 的存在,Python 的多線程并不適用于 CPU 密集型任務,而對于這種情況,可以考慮使用多進程來實現并行計算。

使用demo

下面是一個簡單的多線程使用案例,演示了如何通過多線程并發執行多個任務:

import threading
import time# 定義一個簡單的任務函數
def task(name, delay):print(f"Task {name} started")time.sleep(delay)  # 模擬耗時操作print(f"Task {name} finished")# 創建并啟動多個線程執行任務
threads = []
for i in range(1, 4):thread = threading.Thread(target=task, args=(i, i))thread.start()threads.append(thread)# 等待所有線程執行完畢
for thread in threads:thread.join()print("All tasks have finished")

在這個示例中,定義了一個名為 task() 的簡單任務函數,它接受任務名稱和延遲時間作為參數,然后在指定的延遲時間后完成任務。然后,我們創建了三個線程,并使用 threading.Thread 類將 task() 函數設置為這些線程的目標函數,并通過 args 參數傳入任務名稱和延遲時間。接著,啟動這些線程,并將它們添加到一個列表中。最后,使用 join() 方法等待所有線程執行完畢,并打印出所有任務執行完成的消息。

這個示例演示了如何使用多線程來并發執行多個任務,每個任務都在獨立的線程中執行,不會相互阻塞,從而提高了程序的執行效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697889.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697889.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697889.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前端素材】推薦優質后臺管理系統Spica Admin平臺模板(附源碼)

一、需求分析 后臺管理系統是一種用于管理網站、應用程序或系統的工具,它通常作為一個獨立的后臺界面存在,供管理員或特定用戶使用。下面詳細分析后臺管理系統的定義和功能: 1. 定義 后臺管理系統是一個用于管理和控制網站、應用程序或系統…

【安全】大模型安全綜述

大模型相關非安全綜述 LLM演化和分類法 A survey on evaluation of large language models,” arXiv preprint arXiv:2307.03109, 2023.“A survey of large language models,” arXiv preprint arXiv:2303.18223, 2023.“A survey on llm-gernerated text detection: Necess…

刷題日記-Day1- Leedcode-704. 二分查找,27. 移除元素-Python實現

704 二分查找 鏈接:https://leetcode.cn/problems/binary-search/description/ 給定一個 n 個元素有序的(升序)整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標&#xf…

vue3 toRefs之后的變量修改方法

上效果 修改值需要帶上解構之前的對象名obj&#xff0c; changeName:()>{ // toRefs 解決后變量修改值方法&#xff1a; 解構前變量.字段新值 obj.name FEIFEI; } } 案例源碼 <!DOCTYPE html> <html> <head><me…

如何在pgAdmin中用替換的值更新jsonb列?

我有一個名為files的PostgreSQL表&#xff0c;其中包括一個名為formats的jsonb表。雖然有些行是[null]&#xff0c;但其他行具有此結構的對象&#xff1a; {"thumbnail": {"ext": ".jpg","url": "https://some-url.com/image01.…

Vue | (四)使用Vue腳手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目錄 &#x1f4da;初始化腳手架&#x1f407;創建初體驗&#x1f407;分析腳手架結構&#x1f407;關于render&#x1f407;查看默認配置 &#x1f4da;ref與props&#x1f407;ref屬性&#x1f407;props配置項 &#x1f4da;混入&#x1f4da;插件&#x1f4da;scoped樣…

idea配置javafx

一、下載sdk 在jdk8之后,需要下載sdk包 ??javafx-sdk-18.zip 這里適用的jkd版本如圖 二、配置 創建一個項目之后,進行如下配置,將sdk導入到項目中 配置啟動參數 可以使用-號將之前的去掉&

同步 BUCK 與 異步 BUCK 的區別

上篇文章介紹 BUCK 基本拓撲電路工作原理&#xff0c;BUCK 電路如下圖&#xff1a; 因為二極管的存在&#xff0c;只需要控制一個 MOS 管開關&#xff0c;一般將該電路稱為異步 BUCK 電路&#xff0c;如果把這個二極管換為 MOS 管&#xff0c;如下圖&#xff1a; 該電路用到了兩…

vue Threejs實現任意畫線(鼠標點擊畫線)

Threejs實現任意畫線(鼠標點擊畫線) 鼠標左鍵單擊添加點鼠標右鍵回退到上一個點,并繼續畫按住shift可以畫平行于x軸或平行于z軸的線按Esc完成畫線

【leetcode題解C++】121.買賣股票的最佳時機 and 122.買賣股票的最佳時機II and 55.跳躍游戲 and 45.跳躍游戲II

121. 買賣股票的最佳時機 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。 你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。 返回你可以從…

汽車信息安全概述

隨著智能網聯汽車的迅猛發展&#xff0c;車輛不再是簡單的交通工具&#xff0c;而是集數據收集、處理與通信于一體的移動智能終端。然而&#xff0c;這一變革也使得汽車成為黑客攻擊的新目標。汽車信息安全問題日益凸顯&#xff0c;成為行業關注的焦點。本文將深入探討汽車信息…

前后端分離vscode保險業務管理系統vue+Nodejs

本設計主要應用于完成對保險業務進行計算機化的管理。系統前臺展示各種種類的保險&#xff0c;顧客可以選擇登陸后買入。公司員工為管理員&#xff0c;由公司統一分配賬號&#xff0c;員工用工號密碼登陸。可以修改密碼&#xff0c;查看、修改自己的信息。員工可處理顧客信息。…

企微hook框架

https://wwm.lanzoum.com/ipUTp1ot1twh 密碼:hvev 免費的企微框架 支持文本消息&#xff0c;圖片消息&#xff0c;視頻消息&#xff0c;文件消息。 其他可自行下載測試。 有興趣可以進群交流。720192224 BOOL WxWorkSendData(string data) { WX_GETOBJDATA ob…

1.CSS單位總結

CSS 單位總結 經典真題 px 和 em 的區別 CSS 中的哪些單位 首先&#xff0c;在 CSS 中&#xff0c;單位分為兩大類&#xff0c;絕對長度單位和相對長度單位。 絕對長度單位 我們先來說這個&#xff0c;絕對長度單位最好理解&#xff0c;和我們現實生活中是一樣的。在我們…

Windows sever Event 70117000事件日志

背景&#xff1a;Windows server2008 頻繁藍屏&#xff0c;日志報錯信息時間ID&#xff1a;7011&7000&#xff0c;Service Control Manager 原因&#xff1a;Service Control Manager transmits control requests to running services and driver services. It also maint…

mysql-MVCC

一、基礎概念 1. MVCC的含義 MVCC (Multiversion Concurrency Control)&#xff0c;即多版本并發控制技術&#xff0c;它是通過讀取某個時間點的快照數據&#xff0c; 來降低并發事務沖突而引起的鎖等待&#xff0c; 從而提高并發性能的一種機制. MVCC 的實現,是通過保存數據…

汽車常識網:電腦主機如何算功率的計算方法?

今天汽車知識網就給大家講解一下如何計算一臺主機的功率。 它還會解釋如何計算計算機主機所需的功率&#xff1f; &#xff1f; &#xff08;如何計算電腦主機所需的功率&#xff09;進行說明。 如果它恰好解決了您現在面臨的問題&#xff0c;請不要忘記關注本站。 讓我們現在就…

勒索組織再次盯緊制造業!亞信安全發布《勒索家族和勒索事件監控報告》

本周態勢快速感知 本周全球共監測到勒索事件104起&#xff0c;事件數量有所下降。 lockbit3.0仍然是影響最嚴重的勒索家族&#xff1b;hunters和play也是兩個活動頻繁的惡意家族&#xff0c;需要注意防范。 本周8base勒索組織竊取安索杰國際貿易公司大量文件&#xff0c;包括…

谷歌掀桌子!開源Gemma:可商用,性能超過Llama 2!

2月22日&#xff0c;谷歌在官網宣布&#xff0c;開源大語言模型Gemma。 Gemma與谷歌最新發布的Gemini 使用了同一架構&#xff0c;有20億、70億兩種參數&#xff0c;每種參數都有預訓練和指令調優兩個版本。 根據谷歌公布的測試顯示&#xff0c;在MMLU、BBH、GSM8K等主流測試…

解密C語言選擇結構:掌握條件語句與分支邏輯的利器

引言 C語?是結構化的程序設計語?&#xff0c;這?的結構指的是順序結構、選擇結構、循環結構。為什么有著三種結構呢&#xff0c;大家其實可以想象一下&#xff0c;生活中的絕大數事情都可以抽象著三種結構&#xff0c;而我們今天要給大家介紹的就是三大結構之一——選擇結構…