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

資訊專欄INFORMATION COLUMN

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

89542767 / 553人閱讀

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


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


  方法一


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


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


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


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


  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方法,返回線程函數(shù)的返回值


  默認(rèn)的thread.join()方法只是等待線程函數(shù)結(jié)束,沒有返回值,我們可以在此處返回函數(shù)的運(yùn)行結(jié)果,代碼如下:


  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。


  這樣當(dāng)我們調(diào)用thread.join()等待線程結(jié)束的時(shí)候,也就得到了線程的返回值。


  方法三


  使用標(biāo)準(zhǔn)庫concurrent.futures


  我覺得前兩種方式實(shí)在太低級了,Python的標(biāo)準(zhǔn)庫concurrent.futures提供更高級的線程操作,可以直接獲取線程的返回值,相當(dāng)優(yōu)雅,代碼如下:


  import concurrent.futures
  def foo(bar):
  return bar
  with concurrent.futures.ThreadPoolExecutor(max_workers=10)as executor:
  to_do=[]
  for i in range(10):#模擬多個任務(wù)
  future=executor.submit(foo,f"hello world!{i}")
  to_do.append(future)
  for future in concurrent.futures.as_completed(to_do):#并發(fā)執(zhí)行
  print(future.result())


  某次運(yùn)行的結(jié)果如下:


  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種方法,推薦使用第三種


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)砀鄮椭?/p>

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/128309.html

相關(guān)文章

  • Python三種主要模塊介紹

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

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

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

    89542767 評論0 收藏0
  • Python基礎(chǔ)知識解答:字典詳細(xì)使用教程

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

    89542767 評論0 收藏0
  • Python標(biāo)準(zhǔn)庫sys庫常用功能相關(guān)解答

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

    89542767 評論0 收藏0

發(fā)表評論

0條評論

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