在python中动态执行多处理

2024-06-07 05:08:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python文件,我通过C调用它。我提供了各种参数,其中一个是我要运行的函数。我使用多重处理,并将daemon标志设置为True。然后我join()新进程的main具有可选的时间限制。在

一切都如我所愿,但我希望它更具动态性,这样我就不必有一个庞大的if-else if语句列表来决定调用哪个函数。在

那么,我该怎么修改呢

p = Process(target=dc_906, args=(self.transactionCode, self.givexNum, self.amount, queue))

要使用如下所示的内容,其中self.function是已定义函数的名称:

p = Process(target=self.function, args=(self.transactionCode, self.givexNum, self.amount, queue))

完整的python代码:

queue = mp.Queue()

if self.function == 'dc_906':
    p = Process(target=self.dc_906, args=(self.transactionCode, self.givexNum, self.amount, queue))
elif self.function == 'dc_901':
    p = Process(target=self.dc_901, args=(self.transactionCode, self.givexNum, self.amount, queue))
else:
    p = Process(target=self.dc_907, args=(self.transactionCode, self.givexNum, self.amount, queue))

p.daemon = True

p.start()

p.join(2)

if p.is_alive():
    print 'alive'

print queue.get()

size = queue.qsize()

Tags: 函数selftruetargetifqueueargsfunction
2条回答

response to this question一样,我认为您可以简单地使用getattr函数,它将从给定的对象和字符串创建一个函数对象,如下所示:

myfunc = getattr(self, self.function)

这意味着您可以删除if语句并尝试以下操作:

^{pr2}$

别忘了把东西用逗号隔开。在

使用getattr动态获取描述绑定方法的字符串:

p = Process(target=getattr(self, self.function), args=(...)

相关问题 更多 >