编程语言
首页 > 编程语言> > Python IDLE与多线程兼容吗?

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