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執行緒佇列
- 獲取雙非同步返回值時,如何保證主執行緒不阻塞?非同步執行緒
- Java 執行緒建立與常用方法Java執行緒
- Java如何獲取當前執行緒Java執行緒
- python中的執行緒池Python執行緒
- 獲取任意執行緒呼叫棧的那些事執行緒
- python獲取程式執行檔案路徑的方法其一Python
- python多執行緒中:如何關閉執行緒?Python執行緒
- Node.js 執行 shell 命令 主程式獲取返回值Node.js
- easyexcel多sheet多執行緒匯入示例,獲取所以執行緒執行結果後返回Excel執行緒
- 多執行緒(五)---執行緒的Yield方法執行緒
- Python 中執行緒和程式Python執行緒
- String中hashCode方法的執行緒安全執行緒
- Linux應用程式獲取執行緒棧的資訊Linux執行緒
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Python中的多工:多執行緒Python執行緒
- 【JAVA併發第二篇】Java執行緒的建立與執行,執行緒狀態與常用方法Java執行緒
- python執行shell並獲取結果Python
- Java獲取多執行緒執行結果方式的歸納與總結Java執行緒
- 多執行緒的補充 獲取一定時間的執行結果執行緒
- Java多執行緒帶返回值的Callable介面Java執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- python建立新執行緒有哪些方法Python執行緒
- Java 使用輪詢獲取執行緒返回資料Java執行緒
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- java執行緒執行緒休眠,sleep方法Java執行緒
- 簡單分析執行緒獲取ReentrantReadWriteLock 讀鎖的規則執行緒
- Java 執行緒常用操作Java執行緒
- 模板方法中的執行緒安全問題執行緒
- python中5種執行緒鎖Python執行緒
- 獲取的ajax方法return的返回值的問題解析
- Python的執行緒池Python執行緒
- python中的socket+threading多執行緒Pythonthread執行緒