Python IDLE与多线程兼容吗?
作者:互联网
似乎IDLE(标准Python Windows安装的一部分)在没有令人讨厌的挂起或bugout崩溃的情况下将无法正确执行多线程程序.有人知道解决此问题的方法吗?
以下程序将始终挂在IDLE中,但是当直接用Python解释器执行时正常完成:
import threading, time
printLock = threading.Lock()
def pl(s):
printLock.acquire()
print s
printLock.release()
class myThread( threading.Thread ):
def run(self):
i = 0
for i in range(0,30):
pl(i)
time.sleep(0.1)
t = myThread()
t.start()
while threading.activeCount() > 1:
time.sleep(1)
pl( time.time() )
print "all done!"
样本输出:
U:\dev\py\multithreadtest>python mt.py
0
1
2
3
4
5
6
7
8
9
1277935368.84
10
11
12
13
14
15
16
17
18
19
1277935369.84
20
21
22
23
24
25
26
27
28
29
1277935370.84
1277935371.84
all done!
当使用IDLE“运行模块”功能时,输出始终无限期地挂起,大约在机器上显示行23或24的时间.
解决方法:
AFAIK这是在IDLE中运行线程代码时的一个小技巧. IDLE自由地使用GIL,因此竞争条件和死锁很常见.不幸的是,我并不精通线程,无法提供使线程安全的见解.
标签:python-idle,python,multithreading 来源: https://codeday.me/bug/20191010/1888326.html