Python, НЕАКТИВНЫЙ совместимый с многопоточностью?

Кажется, что НЕАКТИВНЫЙ (часть стандартной установки Windows Python) не выполнит многопоточные программы правильно без противного, зависает или катастрофические отказы отступления. Кто-либо знает о способе зафиксировать это?

Следующая программа будет всегда зависать в НЕАКТИВНОМ, но обычно завершаться при выполнении с интерпретатором 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!

вывод при использовании НЕАКТИВНОГО "Выполненного Модуля" функция всегда зависает неограниченно долго приблизительно во время, которое строка, читая 23 или 24 разоблачает на моей машине.

6
задан Mike Simpson 30 June 2010 в 22:10
поделиться

1 ответ

AFAIK, при выполнении потокового кода в IDLE это сущий пустяк. IDLE широко использует GIL, поэтому условия гонки и тупики - обычное дело. К сожалению, я не настолько хорошо разбираюсь в потоковом коде, чтобы предложить свои соображения о том, как сделать его потокобезопасным, помимо очевидного.

0
ответ дан 17 December 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: