name 'aLOCK' is not defined When I add aLOCK = threading.RLock() behind if __name__ == "__main__"

xuanwu348 xuanwu348 at 163.com
Thu Aug 9 12:24:25 EDT 2018


Thanks for your reply!
Yes, move the code from positionA(can run normally) to positionB(exception with name undefined)
I find this content "https://docs.python.org/3.3/tutorial/classes.html#python-scopes-and-namespaces"
But I still don't undewrstand the differenct of  scopes-and-namespaces between positionA and positionB,
I think the variable "aLock" at these positionA or  positionB are all global.
The function can find threading.RLock() by name ""aLock".
 










At 2018-08-09 23:51:45, "Karsten Hilbert" <Karsten.Hilbert at gmx.net> wrote:
>On Thu, Aug 09, 2018 at 11:16:37PM +0800, xuanwu348 wrote:
>
>> The problem I meet when I add "aLOCK = threading.RLock()" to PositionB, the program will report error "name 'aLOCK' is not defined ",
>
>You mean to say: *move*, not *add*.
>
>That is why aLock is out of scope.
>
>	..../python3-doc/html/tutorial/classes.html#python-scopes-and-namespaces
>
>> but when I change this code to PositionA, it can run normally, is there any difference for the code between 'if __name__ == "__main__:"', can you help me, thanks!
>> 
>> The file I was attached, please change the extend ".pyx" to ".py", thanks, code as below, tried python2.7 and python3.4:
>>
>> import threading
>> import time
>> from multiprocessing import Process
>> 
>> #PositionA
>> aLOCK = threading.RLock()      
>> 
>> def Save_runnedCMD(filename, strings):
>>     aLOCK.acquire()
>>     with open(filename, "at") as f:
>>         f.write(str(strings) + "\n\r")
>>     aLOCK.release()
>> 
>> def runCMD(filename):
>>     time.sleep(1)
>>     cmd = "testtest"
>>     Save_runnedCMD(filename, cmd)
>> 
>> 
>> def Thr_run(filename):
>>     t = []
>>     for i in range(2):
>>         tt = threading.Thread(target = runCMD, args=(filename,))
>>         tt.start()
>>         t.append(tt)
>>     for tt in t:
>>         tt.join()     
>> 
>> if __name__ == "__main__":
>>     filename = "./testaaaaa.log"
>> 
>>     #PositionB
>>     #aLOCK = threading.RLock()
>> 
>>     while 1:
>>         t1 = Process(target=Thr_run, args=(filename, ))
>>         t1.start()
>>         t1.join()
>> 
>> Error info as below:
>> D:\Appppp>python testa.py
>> Exception in thread Thread-1:
>> Traceback (most recent call last):
>>   File "C:\Python34\lib\threading.py", line 921, in _bootstrap_inner
>>     self.run()
>>   File "C:\Python34\lib\threading.py", line 869, in run
>>     self._target(*self._args, **self._kwargs)
>>   File "D:\Appppp\testa.py", line 15, in runCMD
>>     Save_runnedCMD(filename, cmd)
>>   File "D:\Appppp\testa.py", line 7, in Save_runnedCMD
>>     aLOCK.acquire()
>> NameError: name 'aLOCK' is not defined
>> 
>> Exception in thread Thread-2:
>> Traceback (most recent call last):
>>   File "C:\Python34\lib\threading.py", line 921, in _bootstrap_inner
>>     self.run()
>>   File "C:\Python34\lib\threading.py", line 869, in run
>>     self._target(*self._args, **self._kwargs)
>>   File "D:\Appppp\testa.py", line 15, in runCMD
>>     Save_runnedCMD(filename, cmd)
>>   File "D:\Appppp\testa.py", line 7, in Save_runnedCMD
>>     aLOCK.acquire()
>> NameError: name 'aLOCK' is not defined
>> -- 
>> https://mail.python.org/mailman/listinfo/python-list
>
>-- 
>GPG  40BE 5B0E C98E 1713 AFA6  5BC0 3BEA AC80 7D4F C89B
>-- 
>https://mail.python.org/mailman/listinfo/python-list


More information about the Python-list mailing list