在robot框架中使用python的多线程,包括嵌套函数调用

在robot框架中使用python的多线程,包括嵌套函数调用,python,multithreading,robotframework,Python,Multithreading,Robotframework,我有以下python代码“ex.py”,它试图执行两个功能完全相同的并行线程: import thread class PrtArg(object): def print_name1(tname,*args): cnt = 0 print "Inside print_name1" while cnt < 10: cnt += 1 print "%s : %s\n" % (tname,

我有以下python代码“ex.py”,它试图执行两个功能完全相同的并行线程:

import thread

class PrtArg(object):

    def print_name1(tname,*args):
        cnt = 0
        print "Inside print_name1"
        while cnt < 10:
            cnt += 1
            print "%s : %s\n" % (tname, cnt)

    def print_name(tname,*args):
        cnt = 0
        print "Inside print_name"
        while cnt < 10:
            cnt += 1
            print "%s : %s\n" % (tname, cnt)

    def m_prt(self,*args):
        thread.start_new_thread(print_name, (args[0],))
        thread.start_new_thread(print_name1, (args[1],))
执行此操作时,会出现以下错误:

==============================================================================
Ex :: MultiThread Program
==============================================================================
Test title :: MultiThread                                             | FAIL |
NameError: global name 'print_name' is not defined
------------------------------------------------------------------------------
Ex :: MultiThread Program                                            | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================
现在,我遇到了这样一个问题:“线程通常应该只从主线程与框架通信”。上面的代码不是这样做的吗?我甚至没有返回值。只是打印到控制台。正如所料,当我将我的“example.robot”修改为以下内容时,它可以正常工作:

*** Settings ***
Documentation    MultiThread Program
Library  example4.PrtArg

*** Test Cases ***
Test title
    [Documentation]  MultiThread
    [Tags]    DEBUG
    print_name  a
    print_name1  b

*** Keywords ***
因此,我的问题是:

  • 如何使用调用python库中其他函数的静态关键字运行testcase?这可能吗
  • robot框架是否支持这种多线程方式
  • 我是不是遗漏了什么

  • 您应该尝试在静态中声明您的方法,因为它们位于类的实例中,而
    start\u new\u线程
    不会采用这种方式

    所以你的代码应该是这样的

    import thread
    
    class PrtArg(object):
        @staticmethod
        def print_name1(tname,*args):
            cnt = 0
            print "Inside print_name1"
            while cnt < 10:
                cnt += 1
                print "%s : %s\n" % (tname, cnt)
    
        @staticmethod
        def print_name(tname,*args):
            cnt = 0
            print "Inside print_name"
            while cnt < 10:
                cnt += 1
                print "%s : %s\n" % (tname, cnt)
    
        def m_prt(self,*args):
            thread.start_new_thread(PrtArg.print_name, (args[0],))
            thread.start_new_thread(PrtArg.print_name1, (args[1],))
    
    导入线程
    类PrtArg(对象):
    @静力学方法
    def打印名称1(tname,*args):
    cnt=0
    打印“内部打印名称1”
    当cnt<10时:
    cnt+=1
    打印“%s:%s\n”%(t名称,cnt)
    @静力学方法
    def打印名称(tname,*args):
    cnt=0
    打印“内部打印名称”
    当cnt<10时:
    cnt+=1
    打印“%s:%s\n”%(t名称,cnt)
    def m_prt(自身,*参数):
    thread.start\u new\u线程(PrtArg.print\u名称,(args[0],)
    thread.start\u new\u线程(PrtArg.print\u name1,(args[1],)
    
    非常感谢。成功了!因此,线程或嵌套函数调用毕竟不是问题。让我困惑的是,作为一个独立的脚本,同样的脚本工作得很好。
    import thread
    
    class PrtArg(object):
        @staticmethod
        def print_name1(tname,*args):
            cnt = 0
            print "Inside print_name1"
            while cnt < 10:
                cnt += 1
                print "%s : %s\n" % (tname, cnt)
    
        @staticmethod
        def print_name(tname,*args):
            cnt = 0
            print "Inside print_name"
            while cnt < 10:
                cnt += 1
                print "%s : %s\n" % (tname, cnt)
    
        def m_prt(self,*args):
            thread.start_new_thread(PrtArg.print_name, (args[0],))
            thread.start_new_thread(PrtArg.print_name1, (args[1],))