在 Python 中将类的实例传递给多进程

问题描述 投票:0回答:1
   import multiprocessing
   import time

   def sleeper(sec):
   time.sleep(sec)

   if __name__ == "__main__":  
     sec=1
     process = multiprocessing.Process(target=sleeper,args=[sec])
     process.start()

上面的代码运行良好。但是,如果 sleeper 函数是类实例中的方法,则该方法不起作用。所以我需要一些想法,如果 sleeper 函数是即时方法我应该做什么(如下所示)


    class SleepingClass:
      def __init__(self, sec):
        self.sec = sec

      def sleeper(sec):
      time.sleep(sec) 

sleepingClass = SleepingClass(1)


if __name__ == "__main__":  
    sec=1
    process = multiprocessing.Process(target=sleepingClass.sleeper,args=[sec])
    process.start()

我尝试运行不在实例类中的方法并且它有效。但当我把它放在实例类中时,它却没有。

python multiprocessing instance
1个回答
0
投票

课程写得不正确。代码中的评论如下:

import multiprocessing
import time

class SleepingClass:
    def __init__(self, sec):
        self.sec = sec

    def sleeper(self):  # No need for argument.  Instance has it.
        print(f'sleeping for {self.sec} seconds...')
        time.sleep(self.sec) 

if __name__ == "__main__":
    # Create the instance only in main
    sleepingClass = SleepingClass(1)
    # Pass it to the sub-process...no need to pass an argument.
    process = multiprocessing.Process(target=sleepingClass.sleeper)
    process.start()
© www.soinside.com 2019 - 2024. All rights reserved.