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

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

收聽列表??并在附加時(shí)做某事

收聽列表??并在附加時(shí)做某事

萬千封印 2023-05-23 15:56:32
我有一個(gè) API 監(jiān)聽傳入的請求并將它們轉(zhuǎn)儲到列表中。在一個(gè)單獨(dú)的過程中,我想在附加列表時(shí)觸發(fā)某種操作。我嘗試實(shí)例化一個(gè)新進(jìn)程(來自多處理),但它不會在啟動后更新數(shù)組的狀態(tài)。from multiprocessing import Processimport timeprocs = []def separateProcess(start, counter):    while True:        time.sleep(1)        print("length of the list from separate Process: "+str(len(procs)))if __name__ == '__main__':    print("program started")    counter = 0    Process(target=separateProcess, args=(counter, counter)).start()    print("program end")    while True:        counter += 1        newstring = "string "+str(counter)        procs.append(newstring)        print("length of the list from main: " + str(len(procs)))        time.sleep(2)這是輸出:length of the list from main: 1length of the list from separate Process: 0length of the list from main: 2length of the list from separate Process: 0length of the list from separate Process: 0length of the list from main: 3length of the list from separate Process: 0length of the list from separate Process: 0
查看完整描述

1 回答

?
慕后森

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

創(chuàng)建新的子進(jìn)程時(shí),它會獲得父進(jìn)程地址空間的副本,但是任何后續(xù)更改(無論是父進(jìn)程還是子進(jìn)程)都不會反映在其他進(jìn)程的內(nèi)存中。他們每個(gè)人都有自己的私人地址空間。

您可以創(chuàng)建一個(gè)Manager()并改用其共享列表對象:

import time

??

from multiprocessing import Manager, Process


def separateProcess(start, counter):

? ? while True:

? ? ? ? time.sleep(1)

? ? ? ? print("length of the list from separate Process: "+str(len(procs)))



if __name__ == '__main__':

? ? m = Manager()

? ? procs = m.list()


? ? print("program started")


? ? counter = 0

? ? Process(target=separateProcess, args=(counter, counter)).start()

? ? print("program end")

? ? while True:

? ? ? ? counter += 1

? ? ? ? newstring = "string "+str(counter)

? ? ? ? procs.append(newstring)

? ? ? ? print("length of the list from main: " + str(len(procs)))

? ? ? ? time.sleep(2)

這種方法有一些開銷,因?yàn)樗鼤a(chǎn)生一個(gè)子進(jìn)程來托管服務(wù)器Manager。


如果您可以調(diào)整工作進(jìn)程邏輯以改為使用隊(duì)列,這里有一個(gè)示例:


import random

import time


from multiprocessing import cpu_count, Process, Queue



def worker(q):

? ? for item in iter(q.get, 'STOP'):

? ? ? ? t = random.uniform(1, 5)

? ? ? ? print(f'START item: {item}')

? ? ? ? time.sleep(t)

? ? ? ? print(f'END item: {item}, ({t:.3f}s)')



def main():

? ? cpus = cpu_count()

? ? q = Queue()


? ? for i in range(5):

? ? ? ? q.put(i)


? ? for i in range(cpus):

? ? ? ? Process(target=worker, args=(q,)).start()


? ? for i in range(cpus):

? ? ? ? q.put('STOP')



if __name__ == '__main__':

? ? main()


查看完整回答
反對 回復(fù) 2023-05-23
  • 1 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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