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

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

滿足條件時(shí)終止多處理進(jìn)程

滿足條件時(shí)終止多處理進(jìn)程

湖上湖 2021-10-12 17:27:16
我試圖運(yùn)行的想法是這樣的:運(yùn)行 3 個(gè)進(jìn)程進(jìn)行計(jì)算一旦 3 個(gè)進(jìn)程之一完成任務(wù)立即殺死其他進(jìn)程并繼續(xù)執(zhí)行主要任務(wù),我不能讓它再運(yùn)行了我嘗試過的事情是:通過 multiprocessing.manager 放置全局變量,但這仍然讓進(jìn)程完成它們的循環(huán)。引發(fā)異常操作系統(tǒng):Windows 蟒蛇:2.7def f(name):    Doing = True    try:        while Doing:            print 'DOING',name            somecodethatmarksDoingAsFalse()    except Exception as error:        print 'bye'        print error        Doing = False        return Trueif __name__ == '__main__':    p = multiprocessing.Process(target=f, args=('bob',))    p2 = multiprocessing.Process(target=f, args=('tom',))    p.start()    p2.start()    p.join()    p2.join()    raise Exception('I know Python!')    sys.exit()我希望能夠在將執(zhí)行標(biāo)記為 false、引發(fā)異?;蛟趯?duì)其中一個(gè)進(jìn)程進(jìn)行計(jì)算時(shí)以任何方式終止所有進(jìn)程編輯:它不是重復(fù)的,因?yàn)樗匀煌瓿蓤?zhí)行代碼,例如請(qǐng)求模塊仍然發(fā)送數(shù)據(jù)
查看完整描述

1 回答

?
千萬里不及你

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

如果您需要立即殺死,您可以使用 amultiprocessing.Event通知父進(jìn)程滿足條件并讓它立即殺死工作進(jìn)程。管理器進(jìn)程對(duì)于這種需要的少量同步來說太重了。


import os

from datetime import datetime

from multiprocessing import Process, Event



def worker(range_, target, found_event):

    print('{} | pid: {} started'.format(datetime.now(), os.getpid()))

    for x in range_:

        if x == target:

            print('{} | pid: {} found target'.format(

                datetime.now(), os.getpid())

            )

            found_event.set()



if __name__ == "__main__":


    N_WORKERS = 4


    step = int(200e6)

    ranges = [range(x, x + step) # change `range` to `xrange` for Python 2

              for x in range(0, N_WORKERS * step, step)]

    # range(0, 200000000), ..., range(800000000, 1000000000)]

    target = int(150e6)  # <-- worker finding this value triggers massacre

    found_event = Event()


    pool = [Process(target=worker, args=(range_, target, found_event))

            for range_ in ranges]


    for p in pool:

        p.start()


    found_event.wait()  # <- blocks until condition met

    print('{} | terminating processes'.format(datetime.now()))

    for p in pool:

        p.terminate()

    for p in pool:

        p.join()

    print('{} | all processes joined'.format(datetime.now()))

示例輸出:


2019-01-17 01:55:33.781884 | pid: 28376 started

2019-01-17 01:55:33.782333 | pid: 28377 started

2019-01-17 01:55:33.782851 | pid: 28378 started

2019-01-17 01:55:33.783484 | pid: 28379 started

2019-01-17 01:55:54.715425 | pid: 28376 found target

2019-01-17 01:55:54.715613 | terminating processes

2019-01-17 01:55:54.716326 | all processes joined


Process finished with exit code 0


查看完整回答
反對(duì) 回復(fù) 2021-10-12
  • 1 回答
  • 0 關(guān)注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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