簡體   English   中英

使用多處理庫在同一類中運行並發進程

[英]Run concurrent processes in same class with multiprocessing library

我需要與“多處理”庫並行運行多個類函數,但我無法找到針對我的特定問題的指南或答案。 我的問題是只有第一個進程正在啟動(或正在運行,我不知道這里的確切區別)。

為了說明這個問題,我設置了以下示例:

import multiprocessing
import time

class parallel_printer(multiprocessing.Process):

    def __init__(self, freq_0, freq_1, freq_2):
        self.freq_0 = freq_0
        self.freq_1 = freq_1
        self.freq_2 = freq_2

    def print_0(self):
        while True:    
            now = time.localtime()
            if now.tm_sec % self.freq_0 == 0:
                print('printer 0')
                time.sleep(1.0)

    def print_1(self):
        while True:    
            now = time.localtime()
            if now.tm_sec % self.freq_1 == 0:
                print('printer 1')
                time.sleep(1.0)

    def print_2(self):
        while True:    
            now = time.localtime()
            if now.tm_sec % self.freq_2 == 0:
                print('printer 2')
                time.sleep(1.0)

    def start_printer(self):

        p_0 = multiprocessing.Process(target = self.print_0())
        p_1 = multiprocessing.Process(target = self.print_1())
        p_2 = multiprocessing.Process(target = self.print_2())

        p_0.start()
        p_1.start()
        p_2.start()


class Tester(object):

    def __init__(self):        

        self.freq_0 = 3
        self.freq_1 = 7
        self.freq_2 = 11

        self.parallel_printer = parallel_printer(self.freq_0, self.freq_1, self.freq_2)

    def start_Tester(self):
        self.parallel_printer.start_printer()


if __name__ == '__main__':
tester = Tester()
tester.start_Tester()      

正如您可以在multiprocessing.Process的 Python 文檔中閱讀的那樣,您需要為target參數傳遞“調用對象”。

您的代碼應如下所示:

p_0 = multiprocessing.Process(target=self.print_0)
p_1 = multiprocessing.Process(target=self.print_1)
p_2 = multiprocessing.Process(target=self.print_2)

如果您編寫self.print_0()而不是self.print_0 ,則您不會像應該做的那樣傳遞調用對象,而是調用函數並傳遞返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM