Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在python中动态执行多处理_C#_Python_Python 2.7 - Fatal编程技术网

C# 在python中动态执行多处理

C# 在python中动态执行多处理,c#,python,python-2.7,C#,Python,Python 2.7,我有一个通过C#调用的python文件。我提供了各种参数,其中一个是我想要运行的函数。我正在使用多处理,将守护进程标志设置为True。然后,我使用带有可选时间限制的main调用新进程 一切都按我所希望的方式工作,但我希望它更具动态性,这样我就不必有一个庞大的if-else-if语句列表来决定调用哪个函数 那么,如何修改 p=Process(target=dc_906,args=(self.transactionCode,self.givexNum,self.amount,queue)) 要使用如

我有一个通过C#调用的python文件。我提供了各种参数,其中一个是我想要运行的函数。我正在使用多处理,将
守护进程
标志设置为
True
。然后,我使用带有可选时间限制的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()

使用
getattr
在给定描述绑定方法的字符串的情况下动态获取绑定方法:

p = Process(target=getattr(self, self.function), args=(...)
就像,我认为您可以简单地使用
getattr
函数,它将从给定的对象和字符串创建一个函数对象,如下所示:

myfunc = getattr(self, self.function)
这意味着您可以删除if语句并尝试以下操作:

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

别忘了还是用逗号分隔。

那个特殊情况输入错误。我已经修复了,它们应该都是一样的。嗯,那么straighforward。我得到了一个语法错误,我将截屏并在我的问题中发布它。你在
getattr()
后缺少一个逗号。哈,是的。我刚才看到了。