简体   繁体   中英

Why can't multiprocess.Process call getattr method?

Trying to call two methods say_hello and say_world by getattr() in multiprocessing.Process , but method say_world hasn't been executed. How can I make it possible? Thanks.

# -*- 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()

The parameter target expects a reference to a function as value but your code passes None to it. These are the necessary parts to change:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM