溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python多進(jìn)程使用函數(shù)封裝

發(fā)布時(shí)間:2020-06-18 23:28:08 來源:網(wǎng)絡(luò) 閱讀:1828 作者:雷頓學(xué)院 欄目:編程語(yǔ)言
import multiprocessing as mp
from multiprocessing import Process
class MyProcess(Process):
    """
    自定義多進(jìn)程,繼承自原生Process,目的是獲取多進(jìn)程結(jié)果到queue
    """

    def __init__(self, func, args, q):
        super(MyProcess, self).__init__()
        self.func = func
        self.args = args
        self.res = ''
        self.q = q
        #self._daemonic = True
        #self._daemonic = True

    def run(self):
        self.res = self.func(*self.args)
        self.q.put((self.func.__name__, self.res))
    
def use_multiprocessing(func_list):
    #os.system('export PYTHONOPTIMIZE=1')  # 解決 daemonic processes are not allowed to have children 問題
    q = mp.Queue()  # 隊(duì)列,將多進(jìn)程結(jié)果存入這里,進(jìn)程間共享, 多進(jìn)程必須使用  multiprocessing 的queue
    proc_list = []
    res = []
    for func in func_list:
        proc = MyProcess(func['func'], args=func['args'], q=q)
        proc.start()
        proc_list.append(proc)

    for p in proc_list:
        p.join()
    while not q.empty():
        r = q.get()
        res.append(r)
    return res
    
 使用時(shí)候,將需要多進(jìn)程執(zhí)行的函數(shù)和函數(shù)的參數(shù)當(dāng)作字段,組成個(gè)list 傳給use_multiprocessing 方法即可


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI