最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)從線(xiàn)程獲取返回值

 更新時(shí)間:2024年09月10日 08:42:56   作者:跡憶客  
本文介紹了Python中線(xiàn)程的概念、創(chuàng)建線(xiàn)程的方法和在線(xiàn)程中獲取函數(shù)返回值的技巧,線(xiàn)程作為進(jìn)程中的執(zhí)行單元,可以實(shí)現(xiàn)程序的并發(fā)運(yùn)行,文章通過(guò)示例代碼展示了如何在Python中使用Thread類(lèi)創(chuàng)建線(xiàn)程,并講解了在線(xiàn)程中傳遞參數(shù)和獲取返回值的方法

這篇文章首先討論了線(xiàn)程的基礎(chǔ)知識(shí),并提供了一個(gè)在Python中啟動(dòng)線(xiàn)程的代碼示例。然后,我們將討論一個(gè)在線(xiàn)程中獲取函數(shù)返回值的代碼。

線(xiàn)程是進(jìn)程內(nèi)的輕量級(jí)執(zhí)行單元,具有自己的程序執(zhí)行狀態(tài)。一個(gè)進(jìn)程可以運(yùn)行多個(gè)線(xiàn)程以實(shí)現(xiàn)并發(fā)(有時(shí)也是并行)。

進(jìn)程和線(xiàn)程的主要區(qū)別在于每個(gè)進(jìn)程都有一個(gè)獨(dú)立的不相交地址空間,而同一進(jìn)程的多個(gè)線(xiàn)程共享單個(gè)進(jìn)程的地址空間。

這意味著線(xiàn)程可以使用共享內(nèi)存進(jìn)行通信,而無(wú)需額外的管道(普通管道或FIFO)或任何消息傳遞接口。

在Python中使用多線(xiàn)程的HelloWorld程序

考慮以下代碼:

from threading import Thread

# 一個(gè)線(xiàn)程的函數(shù)
def first_function():
    print('Hello World')

print("main program start")

thread_1 = Thread(target=first_function)
thread_2 = Thread(target=first_function)
thread_1.start()
thread_2.start()

print("main ends")

在上面的代碼中,首先我們使用 from threading import Thread 語(yǔ)句導(dǎo)入 Thread 類(lèi)以使用多線(xiàn)程功能。我們定義了一個(gè)名為 first_function() 的函數(shù),用于顯示 “Hello World”,并使用 Thread() 類(lèi)實(shí)例化了兩個(gè)線(xiàn)程對(duì)象。

我們通過(guò)將 first_function() 作為目標(biāo)函數(shù)傳遞給 Thread() 來(lái)創(chuàng)建了兩個(gè) Thread() 類(lèi)的實(shí)例。target 屬性指定要由 Thread() 執(zhí)行的函數(shù)。

一旦創(chuàng)建了 Thread() 實(shí)例,我們可以使用 .start() 方法運(yùn)行和執(zhí)行這些線(xiàn)程。

在線(xiàn)程中傳遞參數(shù)給函數(shù)

考慮以下代碼:

from threading import Thread

def first_function(name, id):
    print('Hello World from', name, "ID=", id)

thread_1 = Thread(target=first_function, args=("Thread 1", 1))
thread_2 = Thread(target=first_function, args=("Thread 2", 2))
thread_1.start()
thread_2.start()

在上面的代碼中,我們定義了一個(gè)名為 first_function(name, id) 的函數(shù),它接收兩個(gè)參數(shù) name 和 id。我們使用 args 在 Thread 類(lèi)中將這些參數(shù)作為元組傳遞。

我們創(chuàng)建了兩個(gè) Thread 類(lèi)對(duì)象,并分別將參數(shù) args=("Thread 1", 1)args=("Thread 2", 2) 傳遞給 thread_1 和 thread_2。然后,我們使用 thread_1.start()thread_2.start() 來(lái)運(yùn)行這些線(xiàn)程。

在Python中從運(yùn)行在線(xiàn)程中的函數(shù)中獲取返回值

有多種方法可以從在線(xiàn)程中運(yùn)行的函數(shù)中獲取返回值。

傳遞一個(gè)可變對(duì)象給函數(shù)

我們可以通過(guò)將一個(gè)可變對(duì)象傳遞給在線(xiàn)程中運(yùn)行的函數(shù)來(lái)獲取函數(shù)的返回值;函數(shù)將返回值放在該對(duì)象中。

考慮以下代碼:

from threading import Thread

def first_function(first_argu, return_val):
    print(first_argu)
    return_val[0] = "Return Value from " + first_argu

return_val_from_1 = [None] * 1
return_val_from_2 = [None] * 1

thread_1 = Thread(target=first_function, args=("Thread 1", return_val_from_1))
thread_2 = Thread(target=first_function, args=("Thread 2", return_val_from_2))

thread_1.start()
thread_2.start()

thread_1.join()
thread_2.join()

print(return_val_from_1)
print(return_val_from_2)

上面的代碼定義了一個(gè)名為 first_function 的函數(shù),它接收兩個(gè)參數(shù) first_argu 和 return_val。first_function 顯示 first_argu 的值,并將返回值放在 return_val 的索引 0 處。

我們使用 Thread 類(lèi)創(chuàng)建線(xiàn)程,并傳遞兩個(gè)參數(shù),包括一個(gè)列表 args=("Thread 1", return_val_from_1)args=("Thread 2", return_val_from_2) 分別給 thread_1 和 thread_2。

return_val_from_1 和 return_val_from_2 用于獲取函數(shù)的返回值。

thread_1.join()thread_2.join() 用于等待主程序完成這兩個(gè)線(xiàn)程。

讓我們看一下上述代碼片段的輸出:

使用 join 方法

join 方法是另一種從在線(xiàn)程中獲取返回值的方法。

考慮以下代碼:

from threading import Thread

def first_function(first_argu):
    print(first_argu)
    return "Return Value from " + first_argu

class NewThread(Thread):
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs={}):
        Thread.__init__(self, group, target, name, args, kwargs)
    def run(self):
        if self._target != None:
            self._return = self._target(*self._args, **self._kwargs)
    def join(self, *args):
        Thread.join(self, *args)
        return self._return

thread_1 = NewThread(target=first_function, args=("Thread 1",))
thread_2 = NewThread(target=first_function, args=("Thread 2",))

thread_1.start()
thread_2.start()

print(thread_1.join())
print(thread_2.join())

在上面的代碼中,我們定義了一個(gè)名為 NewThread 的自定義類(lèi),它是 Thread 類(lèi)的子類(lèi)。我們重新定義了 run 和 join 方法。

一旦我們創(chuàng)建并啟動(dòng)了一個(gè)線(xiàn)程,join() 方法將返回從 first_function 返回的值。

以下是上述代碼的輸出:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中pre-commit的具體使用

    Python中pre-commit的具體使用

    pre-commit是Git預(yù)提交鉤子框架,通過(guò)配置文件自動(dòng)執(zhí)行代碼檢查、格式化等任務(wù),確保團(tuán)隊(duì)代碼規(guī)范并提升質(zhì)量,下面就一起來(lái)了解一下
    2025-06-06
  • 深度學(xué)習(xí)的MNIST手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集識(shí)別方式(準(zhǔn)確率99%,附代碼)

    深度學(xué)習(xí)的MNIST手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集識(shí)別方式(準(zhǔn)確率99%,附代碼)

    這篇文章主要介紹了深度學(xué)習(xí)的MNIST手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集識(shí)別方式(準(zhǔn)確率99%,附代碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 詳解Python中的PyInputPlus模塊

    詳解Python中的PyInputPlus模塊

    這篇文章主要介紹了Python中的PyInputPlus模塊詳解,PyInputPlus包含與input()類(lèi)似的、用戶(hù)多種數(shù)據(jù)(數(shù)字日期、E-mail地址等)的函數(shù),PyInputPlus還包含其他有用的功能,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Python遞歸調(diào)用實(shí)現(xiàn)數(shù)字累加的代碼

    Python遞歸調(diào)用實(shí)現(xiàn)數(shù)字累加的代碼

    今天小編就為大家分享一篇Python遞歸調(diào)用實(shí)現(xiàn)數(shù)字累加的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 最新評(píng)論

    崇州市| 古丈县| 内黄县| 淄博市| 灵丘县| 伊金霍洛旗| 调兵山市| 贵州省| 夹江县| 泽普县| 合江县| 梅州市| 巴林右旗| 博湖县| 邹城市| 乌海市| 涞水县| 天津市| 三门峡市| 房山区| 错那县| 偏关县| 大冶市| 五大连池市| 沅江市| 册亨县| 秭归县| 扎兰屯市| 邵阳市| 乐至县| 怀安县| 和静县| 庆城县| 苗栗市| 抚顺县| 兴国县| 青浦区| 教育| 行唐县| 桐庐县| 临洮县|