从另一个模块的不同线程接收返回值



我试图在执行线程的python中复制C#代码,等待它完成并返回值。本质上,方法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中,我一直在努力解决一些问题。首先,似乎有不同类型的队列,我只是选择了似乎正在工作的import Queue的导入。其次,我收到一个TypeError,如下所示。

Traceback(最近一次调用):文件"C:/用户/JSC/文件/Git/EnterprisePlatform/企业/AI.App.Tool.AutomatedMachineTest/脚本/monkey.py",第9行文件"C: 用户文档 JSC Git EnterprisePlatform 企业 AI.App.Tool.AutomatedMachineTest Libs MonkeyHelper.py脚本",在RunCmdAndWait中的第4行TypeError: module is not callable

以下是猴子的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()

and 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异常:回溯(最近一次调用):文件"C:Program Files (x86)IronPython 2.7Libthreading.py",第552行,在_Thread__bootstrap_inner .py中self.run ()文件"C:Program Files (x86)IronPython 2.7Libthreading.py",第505行,在运行中自我。目标(*自我。* * self.__kwargs __args)AttributeError: Queue实例没有属性'__len'

这是因为Thread期望多个参数还是因为queue此时仍然为空?从我所看到的是,queue只是作为一个参数传递来接收返回值。这是正确的方法吗?

Edit2

t = threading.Thread(group=None, target=CmdToRun, args=q)更改为t = threading.Thread(group=None, target=CmdToRun, args=(q,))

下面的变化产生TypeError,对我来说似乎很奇怪,因为线程期望一个元组。

线程thread -1异常:回溯(最近一次调用):文件"C:Program Files (x86)IronPython 2.7Libthreading.py",第552行,在_Thread__bootstrap_inner .py中self.run ()文件"C:Program Files (x86)IronPython 2.7Libthreading.py",第505行,在运行中self.__target(*自我。* * self.__kwargs __args)TypeError: tuple is not callable

threading是一个模块。您的意思可能是替换

t = threading(group=None, target=CmdToRun, arg=q)

t = threading.Thread(group=None, target=CmdToRun, args=(q,))

args是一个参数元组

相关内容

  • 没有找到相关文章

最新更新