簡體   English   中英

主模塊以外的模塊中的Python多處理啟動過程

[英]Python Multiprocessing Start Process in Module Other Than Main

我有三個模塊, workermasterMainTests 我正在運行MainTests模塊作為主要腳本。 MainTests ,我調用master.run() ,在其中需要生成多個worker進程。 這可能嗎? 在我遇到的所有python multiprocessing教程中,過程都是在主模塊中啟動的。 如果可能的話,有人可以提供一個例子說明一下嗎?

到目前為止,這是我嘗試過的:

工人

import time

class Worker(object):
    def __init__(self):
        super(Worker, self).__init__()
    def run(self):
        time.sleep(5)
        print("worker done with run")
        return

Master.py:

import multiprocessing

class Master(object):
    def __init__(self, workers_array):
        super(Master, self).__init__()
        self.workers_array = workers_array
    def run(self):
        process_arr = [multiprocessing.Process(worker.run()) for worker in self.workers_array]
        [worker_process.start() for worker_process in process_arr]

MainTests.py

from Worker import *
from Master import *

workers_array = [Worker() for i in range(5)]
master = Master(workers_array)
master.run()

出現兩個問題:

  1. 工作進程似乎是依次運行,一個接一個地運行run()而不是並行運行。
  2. 工人似乎一直在重復跑步。 我希望在工作人員完成運行之后,該程序會結束,但仍會繼續。

在此先感謝您的幫助。

我不確定您是否仍在鎖定答案,但是您只需要在以下if語句中輸入主程序的“入口點”即可:

if __name__ == "__main__":
    main()

這樣,您可以在導入的模塊中啟動流程。 有關更多信息,請查看文檔的這一部分以及其中的所有其他內容:)

在您的示例中,它將是:

from Worker import *
from Master import *

if __name__ == __main__:
    workers_array = [Worker() for i in range(5)]
    master = Master(workers_array)
    master.run()

這對我有用。 希望我能幫上忙。

暫無
暫無

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

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