我正在尝试复制执行线程的C#
中的python
代码,等待它完成并返回一个值。本质上,方法RunAndWait
位于辅助类中,因为对该方法的调用正在多次进行。
C#
代码如下:
public static bool RunAndWait(Action _action, long _timeout)
{
Task t = Task.Run(() =>
{
Log.Message(Severity.MESSAGE, "Executing " + _action.Method.Name);
_action();
});
if (!t.Wait(Convert.ToInt32(_timeout)))
{
Log.Message(Severity.ERROR, "Executing " + _action.Method.Name + " timedout. Could not execute MCS command.");
throw new AssertFailedException();
}
t.Dispose();
t = null;
return true;
}
在python
中,我一直在努力解决一些问题。首先,似乎有不同类型的Queue,我只选择了似乎正在工作的导入import Queue
。其次,我收到如下的TypeError。
追踪(最近一次通话): 文件" C:/Users/JSC/Documents/Git/EnterprisePlatform/Enterprise/AI.App.Tool.AutomatedMachineTest/Scripts/monkey.py", 9号线,在 文件" C:\ Users \ JSC \ Documents \ Git \ EnterprisePlatform \ Enterprise \ AI.App.Tool.AutomatedMachineTest \ Scripts \ Libs \ MonkeyHelper.py", 第4行,在RunCmdAndWait中 TypeError:模块不可调用
以下是猴子的python
代码:
from Libs.CreateConnection import CreateMcsConnection
import Libs.MonkeyHelper as mh
import Queue
q = Queue.Queue()
to = 5000 #timeout
mh.RunCmdAndWait(CreateMcsConnection, to, q)
serv, con = q.get()
和MonkeyHelper.py
:
import threading
def RunCmdAndWait(CmdToRun, timeout, q):
t = threading(group=None, target=CmdToRun, arg=q)
t.start()
t.join(timeout=timeout)
我不确定我做错了什么。我对python很新。有人可以帮帮我吗?
修改
t = threading.Thread(group=None, target=CmdToRun, args=q)
纠正上述行引发了另一个错误:
线程Thread-1中的异常: Traceback(最近一次调用最后一次): 文件" C:\ Program Files(x86)\ IronPython 2.7 \ Lib \ threading.py",第552行,在_Thread__bootstrap_inner中 self.run() 文件" C:\ Program Files(x86)\ IronPython 2.7 \ Lib \ threading.py",第505行,运行中 自我。目标(*自我.__ args,**自我.__ kwargs) AttributeError:队列实例没有属性' __ len '
这是因为Thread
期望多个args还是因为此时queue
仍为空?从我所看到的是queue
只是作为参数传递以接收返回值。这是正确的方法吗?
EDIT2
将t = threading.Thread(group=None, target=CmdToRun, args=q)
更改为t = threading.Thread(group=None, target=CmdToRun, args=(q,))
下面的TypeError中的变化产生,对我来说似乎很奇怪,因为Thread期待一个元组。
线程Thread-1中的异常: Traceback(最近一次调用最后一次): 文件" C:\ Program Files(x86)\ IronPython 2.7 \ Lib \ threading.py",第552行,在_Thread__bootstrap_inner中 self.run() 文件" C:\ Program Files(x86)\ IronPython 2.7 \ Lib \ threading.py",第505行,运行中 self .__ target(* self .__ args,** self .__ kwargs) TypeError:元组不可调用
答案 0 :(得分:1)
threading
是一个模块。你可能想要替换
t = threading(group=None, target=CmdToRun, arg=q)
带
t = threading.Thread(group=None, target=CmdToRun, args=(q,))
args
是一个参数元组。