在 python 中动态执行多处理

本文关键字:处理 执行 动态 python | 更新日期: 2023-09-27 17:56:20

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

一切都按照我想要的方式工作,但我希望它更加动态,这样我就不必有一个巨大的 if 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))

完整的蟒蛇代码:

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

在 python 中动态执行多处理

使用 getattr 动态获取绑定方法,给定一个描述它的字符串:

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

就像对这个问题的回答一样,我认为您可以简单地使用 getattr 函数,它将从给定的对象和字符串创建一个函数对象,如下所示:

myfunc = getattr(self, self.function)

这意味着您可以删除 if 语句并尝试类似以下内容的操作:

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

不要忘记仍然保持逗号分隔。