国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python獲取線程返回值的三種方式分別是什么?下文給大家解答

89542767 / 565人閱讀

  小編寫這篇文字的一個主要目的,主要是給大家解答關于python的一些相關事宜,主要涉及到內容是如何利用其python獲取返回值,那么,返回值的三種方式分別是什么呢?具體的內容,下面就給大家詳細的做出解答。


  提到線程,你的大腦應該有這樣的印象:我們可以控制它何時開始,卻無法控制它何時結束,那么如何獲取線程的返回值呢?今天就分享一下自己的一些做法。


  方法一


  使用全局變量的列表,來保存返回值


  ret_values=[]
  def thread_func(*args):
  ...
  value=...
  ret_values.append(value)


  選擇列表的一個原因是:列表的append()方法是線程安全的,CPython中,GIL防止對它們的并發訪問。如果你使用自定義的數據結構,在并發修改數據的地方需要加線程鎖。


  如果事先知道有多少個線程,可以定義一個固定長度的列表,然后根據索引來存放返回值,比如:


  from threading import Thread
  threads=[None]*10
  results=[None]*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))


  方法二


  重寫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()
  return self._return
  twrv=ThreadWithReturnValue(target=foo,args=("hello world",))
  twrv.start()
  print(twrv.join())#此處會打印hello world。


  這樣當我們調用thread.join()等待線程結束的時候,也就得到了線程的返回值。


  方法三


  使用標準庫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())


  某次運行的結果如下:


  hello world!8


  hello world!3


  hello world!5


  hello world!2


  hello world!9


  hello world!7


  hello world!4


  hello world!0


  hello world!1


  hello world!6


  最后的話


  本文分享了獲取線程返回值的3種方法,推薦使用第三種


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家帶來更多幫助。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128309.html

相關文章

  • Python三種主要模塊介紹

      Python的三種主要模塊介紹  小編寫這篇文章的主要目的,給大家介紹三種主要的模塊,包括系統內的幾種模塊,對其做個具體的介紹,下面就給大家詳細的解答下。  在python中,一個文件(以.py為后綴名的文件)就叫做一個模塊,每一個模塊在python里都被看做是一個獨立的文件。  模塊可以被項目中的其他模塊、一些腳本甚至是交互式的解析器所使用,它可以被其他程序引用,從而使用該模塊里的函數等功能...

    89542767 評論0 收藏0
  • 如何利用python讀取excel表格?下文大家詳細解答

      小編寫這篇文章的一個主要目的,主要就是給大家去做一個解答,接的內容主要是利用python去讀取excel表格,那么,怎么才能快速的實現這個操作呢?下面就給大家詳細解答下。  一、python讀取excel表格數據  1、讀取excel表格數據常用操作  importxlrd   #打開excel表格   data_excel=xlrd.open_workbook('data/datas...

    89542767 評論0 收藏0
  • Python基礎知識解答:字典詳細使用教程

      字典作為python中一個內置的數據機構,它其實和列表是一樣的,但是它又是沒有順序的,以鍵值的方式,用來存儲數據,那么,它的使用教程是什么呢?下文給大家做個解答。  一.什么是字典  字典作為Python的一個內置數據結構,和列表一樣都是可變序列的,但是它是無序的,以鍵值對的方式存儲數據。  二.創建字典  創建字典的兩種方式,一種使用{}另一種使用內置函數dict() #author:爪哇斗...

    89542767 評論0 收藏0
  • Python標準庫sys庫常用功能相關解答

      小編寫這篇文章的主要目的,就是給大家介紹關于Python標準庫sys常用功能的一些介紹,這樣對我們以后的工作也是很有幫助的,具體的介紹,下面就給大家詳細解答下。  1、查看版本信息  #coding:utf-8   importsys   #獲取Python版本信息   print(sys.version)   #獲取解釋器中C的API版本   print(sys.api_version)  ...

    89542767 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<