Python IDLE Compatible With Multithreading?
Solution 1:
import threading
print(threading.activeCount())
prints 1 when run at the command line, 2 when run from Idle. So your loop
while threading.activeCount() > 1:
time.sleep(1)
pl( time.time() )
will terminate in the console but continue forever in Idle.
To fix the problem in the posted code, add something like
initial_threads = threading.activeCount()
after the import and change the loop header to
while threading.activeCount() > initial_threads:
With this change, the code runs through 30 cycles and stops with 'all done!'. I have added this to my list of console Python versus Idle differences that need to be documented.
Solution 2:
AFAIK it's a crapshoot when running threaded code in IDLE. IDLE uses the GIL liberally so race conditions and deadlocks are common. Unfortunately, I am not well versed enough in threading to offer insight on making this thread-safe, beyond the obvious.
Solution 3:
IDLE has some known issues when it comes to threading. I don't know an overwhelming amount about the particulars of why it's an issue, because I try my very hardest to stay away from IDLE, but I know that it is. I would strongly suggest you just go get IronPython and Python Tools for Visual Studio. VS's debugging tools are absolutely unmatched, especially given the huge library of add-ons.
Post a Comment for "Python IDLE Compatible With Multithreading?"