为什么不能多进程。进程调用getattr方法?



试图通过multiprocessing.Process中的getattr()调用两种方法say_hellosay_world,但是尚未执行方法say_world。我怎么能成为可能?谢谢。

# -*- coding: utf-8 -*-
from multiprocessing import Process
import time
class Hello:
    def say_hello(self):
        print('Hello')
    def say_world(self):
        print('World')

class MultiprocessingTest:
    def say_process(self, say_type):
        h = Hello()
        while True:
            if hasattr(h, say_type):
                    result = getattr(h, say_type)()
                    print(result)
            time.sleep(1)
    def report(self):
        Process(target=self.say_process('say_hello')).start()
        Process(target=self.say_process('say_world')).start() # This line hasn't been executed.

if __name__ == '__main__':
    t = MultiprocessingTest()
    t.report()

参数target期望将函数作为值引用,但您的代码将None传递给它。这些是要更改的必要部分:

class Hello:
    def say_hello(self):
        while True:
            print('Hello')
            time.sleep(1)
    def say_world(self):
        while True:
            print('World')
            time.sleep(1)
class MultiprocessingTest:
    def say_process(self, say_type):
        h = Hello()
        if hasattr(h, say_type):
            return getattr(h, say_type) # Return function reference instead of execute function
        else:
            return None

相关内容

  • 没有找到相关文章

最新更新