第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我的Python多進(jìn)程顯然不是獨(dú)立的

我的Python多進(jìn)程顯然不是獨(dú)立的

千巷貓影 2023-07-27 10:01:56
我對(duì) python 并行化有一個(gè)非常具體的問題,讓我們看看我是否可以解釋它,我想foo()使用多處理庫執(zhí)行一個(gè)函數(shù)以進(jìn)行并行化。# Creation of the n processes, in this case 4, and start itthreads = [multiprocessing.Process(target=foo, args=(i)) for i in range(n)]for th in threads:    th.start()該foo()函數(shù)是一個(gè)遞歸函數(shù),它深入探索一棵樹,直到一個(gè)特定事件發(fā)生。根據(jù)它在樹中擴(kuò)展的方式,此事件可能會(huì)在幾個(gè)步驟中發(fā)生,例如 5 個(gè)甚至數(shù)百萬個(gè)。樹節(jié)點(diǎn)是一組元素,在每個(gè)步驟中,我從該集合中選擇一個(gè)隨機(jī)元素,rand_element = random.sample(node.set_of_elements,1)[0]并相應(yīng)地進(jìn)行遞歸調(diào)用,即兩個(gè)不同的隨機(jī)元素具有不同的樹路徑。問題是,由于某種未知的原因,這些進(jìn)程顯然不能獨(dú)立運(yùn)行。例如,如果我并行運(yùn)行 4 個(gè)進(jìn)程,有時(shí)它們會(huì)返回此結(jié)果。1, Number of steps: 52, Number of steps: 53, Number of steps: 54, Number of steps: 5也就是說,所有的過程都走“好路”,并以極少的步驟結(jié)束。另一方面,其他時(shí)候它會(huì)返回這個(gè)。1, Number of steps: 65162, Number of steps: 84633, Number of steps: 461144, Number of steps: 56312也就是說,所有的進(jìn)程都走“壞路”。我還沒有執(zhí)行過一次至少有一個(gè)走“好路徑”而其余走“壞路徑”的執(zhí)行。如果我按foo()順序運(yùn)行多次,超過一半的執(zhí)行以少于 5000 步結(jié)束,但在并發(fā)中我沒有看到這個(gè)比例,所有進(jìn)程要么快要么慢結(jié)束。這怎么可能?很抱歉,如果我無法向您提供有關(guān)程序和執(zhí)行的更準(zhǔn)確的詳細(xì)信息,但它太大太復(fù)雜,無法在這里解釋。
查看完整描述

2 回答

?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

您應(yīng)該使用collections.OrderedDict(或其他有序數(shù)據(jù)結(jié)構(gòu)),而不是set您的程序是否關(guān)心項(xiàng)目順序(random.sample()例如)。即使在 Python 3.7 及更高版本中,在撰寫本文時(shí),sets 也被記錄為無序集合,因此如果插入或枚舉項(xiàng)的順序?qū)δ某绦蚝苤匾?,則不應(yīng)使用它們。

使用 時(shí)set,您不應(yīng)期望以任何特定順序(即使是偽隨機(jī)順序)插入或枚舉項(xiàng)目。


查看完整回答
反對(duì) 回復(fù) 2023-07-27
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

我已經(jīng)找到了解決方案,我將其發(fā)布以防有人覺得有幫助

問題是,在內(nèi)部的某個(gè)時(shí)刻foo(),我使用了該my_set.pop()方法而不是set.remove(random.sample (my_set, 1) [0]). 第一個(gè)my_set.pop()實(shí)際上并不返回隨機(jī)元素。在Python 3.6中,集合有像列表一樣的具體順序,關(guān)鍵是建立的順序是隨機(jī)生成的,因此,要返回(偽)隨機(jī)元素,該方法總是返回第一個(gè)元素my_set.pop()。問題是,就我而言,所有進(jìn)程都共享該順序,因此my_set.pop()在所有進(jìn)程中返回相同的第一個(gè)元素。


查看完整回答
反對(duì) 回復(fù) 2023-07-27
  • 2 回答
  • 0 關(guān)注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)