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

Karsten Hilbert Karsten.Hilbert at gmx.net
Thu Aug 9 11:51:45 EDT 2018


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



More information about the Python-list mailing list