在robot框架中使用python的多线程,包括嵌套函数调用
我有以下python代码“ex.py”,它试图执行两个功能完全相同的并行线程:在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,
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 ***
因此,我的问题是:
您应该尝试在静态中声明您的方法,因为它们位于类的实例中,而
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],))