通过python中的线程访问导入模块的locals()

时间:2019-02-11 09:35:48

标签: python python-multithreading

我的问题是,如何在导入的模块中执行函数期间检查是否创建了局部变量。

例如,我想从chk_local()函数检测创建变量“ c”的时刻:

# module1
def test():
    print "hi"
    print "hi1"
    print "hi2"
    c=250
    print "hi3"
    print "hi4"
    print "hi5"





# main
import threading
import module1 as m1

def chk_local():
    while 1:
        if 'c' in m1.locals():   # does not work
            break
        print "local not detected..."

m1_thread = threading.Thread(target = m1.test)
chk_thread = threading.Thread(target = chk_local)
chk_thread.start()
m1_thread.start()
chk_thread.join()
print "done"

2 个答案:

答案 0 :(得分:0)

首先,locals()函数确实从您当前的本地范围返回变量(如名称所示)。但是,为了解决您的问题,c在您的test函数范围内。 AFAIK,除非您在全局范围的每个本地范围末端内填充locals()的内容,否则无法使用locals()函数在运行时动态地动态访问任何嵌套范围。

EDIT1

(但是,您可能会使用python inspect lib进行检查,因为函数结束时在函数范围内声明的变量将不复存在。)

EDIT2

我突然想到的另一种想法是,线程不具有共享内存,除非您将其分配给它们,这会使预期的检查更加困难,如您所见in this blog post

答案 1 :(得分:-1)

您可以简单地测试是否要通过chk_local()函数检测创建变量“ c”的时刻:

这应该是您的#模块1

#module1
def test():
   print "hi"
   print "hi1"
   print "hi2"
   c=250
   print "hi3"
   print "hi4"
   print c

这应该是您的#个主文件

 import threading
 import module1 as m1

 def chk_local():
     m1.test()

 m1_thread = threading.Thread(target = m1.test)
 chk_thread = threading.Thread(target = chk_local)
 chk_thread.start()
 m1_thread.start()
 chk_thread.join()
 print "done"

O / P将为:

hi
hi1
hi2
hi3
hi4
250
hi
hi1
hi2
hi3
hi4
250
done

您可以检查是否已分配c值。