Python中獲取執行緒返回值的常用方法!
Python中獲取執行緒返回值的方式主要有三種:使用全域性變數的列表,來儲存返回值;重寫Thread的join方法,返回執行緒函式的返回值;使用標準庫concurrent.futures,接下來具體為大家介紹一下這三種方式。
1、使用全域性變數的列表,來儲存返回值
ret_valuese = []
def thread_func(*args):
...
value = ...
ret_values.append(value)
選擇列表的一個原因是:列表的append()方法是執行緒安全的,CPython中,GIL防止對它們的併發訪問。如果你使用自定義的資料結構,在併發修改資料的地方需要加執行緒鎖。
如果事先知道有多少個執行緒,可以定義一個固定長度的列表,然後根據索引來存放返回值,比如:
from = threading import Thread
threads = [Nome] * 10
results = [Nome] * 10
def foo(bar,result,index):
result[index] = f"foo-{index}"
for i in range(len(threads)):
threads[i] = Thread(target=foo, args=('world!',results,i))
threads[i].start()
for i in range(len(threads)):
threads[i].join()
print("".join(results))
2、重寫Thread的join方法,返回執行緒函式的返回值
預設的thread.join()方法只是等待執行緒函式結束,沒有返回值,我們可以在此處返回函式的執行結果,程式碼如下:
from threading import Thread
def foo(arg):
return arg
class ThreadWithReturnValue(Thread):
def run(self):
if self._target is not None:
self._return = self._target(*self._args,**self._kwargs)
def join(self):
super().join()
retirm self._return
twrv = ThreadWithReturnValue(target=foo,args=("hello world",))
twrv.start()
print(twrv.join())#此處會列印hello world。
這樣當我們呼叫thread.join()等待執行緒結束的時候,也就得到了執行緒的返回值。
3、使用標準庫concurrent.futures
相對於前面兩種方法,Python的標準庫concurrent.futures提供更高*的執行緒操作,可以直接獲取執行緒的返回值,相當優雅,程式碼如下:
import concurrent.futures
def foo(bar):
return bar
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
to_do = []
for i in range(10):#模擬多個任務
future = executor.submit(foo,f"hello world! {i}")
to_do.append(future)
for future in concurrent.futures.as_completed(to_do):# 併發執行
print(future.result())
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2951193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python建立多執行緒任務並獲取每個執行緒返回值Python執行緒
- 獲取Java執行緒返回值的幾種方式Java執行緒
- 詳細介紹C++多執行緒獲取返回值的方法C++執行緒
- Java 執行緒池獲取池中所有執行緒列表的方法Java執行緒
- 【java】【多執行緒】獲取和設定執行緒名字、獲取執行緒物件(3)Java執行緒物件
- 獲取雙非同步返回值時,如何保證主執行緒不阻塞?非同步執行緒
- python 的執行緒池如何獲取 work 佇列中的訊息數量Python執行緒佇列
- 獲取執行計劃的方法
- python中的執行緒Python執行緒
- 多執行緒-獲取和設定執行緒物件名稱執行緒物件
- Java多執行緒——獲取多個執行緒任務執行完的時間Java執行緒
- Java 執行緒建立與常用方法Java執行緒
- Java如何獲取當前執行緒Java執行緒
- 怎樣在程式中獲取所有執行緒的堆疊資訊?執行緒
- 獲取任意執行緒呼叫棧的那些事執行緒
- Oracle獲取執行計劃的方法Oracle
- python中的執行緒池Python執行緒
- 理解 Python 中的執行緒Python執行緒
- 理解Python中的執行緒Python執行緒
- 多執行緒-執行緒排程及獲取和設定執行緒優先順序執行緒
- MySQL 5.7獲取指定執行緒正在執行SQL的執行計劃資訊MySql執行緒
- Node.js 執行 shell 命令 主程式獲取返回值Node.js
- python多執行緒中:如何關閉執行緒?Python執行緒
- Python多執行緒爬取知乎獲贊過千的答案連結Python執行緒
- python獲取程式執行檔案路徑的方法其一Python
- 獲取執行計劃的6種方法
- 多執行緒(五)---執行緒的Yield方法執行緒
- Android新執行緒中更新主執行緒UI中的View方法彙總Android執行緒UIView
- Oracle 獲取SQL執行計劃方法OracleSQL
- MySQL 如何獲取執行中的Queries資訊?MySql
- Linux應用程式獲取執行緒棧的資訊Linux執行緒
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle 獲取執行計劃的幾種方法Oracle
- 【JAVA併發第二篇】Java執行緒的建立與執行,執行緒狀態與常用方法Java執行緒
- Python 中執行緒和程式Python執行緒
- 理解 python 中多執行緒Python執行緒
- Java獲取多執行緒執行結果方式的歸納與總結Java執行緒
- Python中的多工:多執行緒Python執行緒