Доступ к localals () импортируемого модуля через потоки в python - PullRequest
0 голосов
/ 11 февраля 2019

Мой вопрос: как можно проверить, что при выполнении функции в импортированном модуле создается локальная переменная.

Например, я хочу определить момент создания переменной "c" из chk_local() функция:

# 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 голосов
/ 11 февраля 2019

Во-первых, функция locals() возвращает переменные из вашей текущей локальной области (как следует из названия).Однако для решения вашей проблемы c является локальной областью действия вашей test функции.AFAIK, вы не можете динамически получать доступ к любой вложенной области во время выполнения автоматически, используя функцию locals(), если вы не заполняете содержимое locals() в конце каждой локальной области в глобальную область.

EDIT1

(однако вы можете использовать python inspect lib для проверки, потому что переменные, объявленные в области действия функции, перестают существовать после завершения функции.)

РЕД.

0 голосов
/ 11 февраля 2019

Вы можете просто проверить, хотите ли вы определить момент создания переменной "c" из функции chk_local ():

Это должен быть ваш # module1

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

Thisдолжен быть вашим # основным файлом

 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 назначено.

...