Форум сайта python.su
Подскажите, пожалуйста, по следующему вопросу.
Мне надо вывести элементы массива в многопоточном режиме, причём, потоки не должны иметь доступа к уже используемым или использованным элементам массива.
Посмотрел доки, написал следующий код:
import threading
import time
arr = ["Item1", "Item2", "Item3",
"Item4", "Item5", "Item6", "Item7"]
def iter(thread):
while len(arr) > 0:
time.sleep(0.01)
print "thread [%d] - %s" % (thread, arr.pop(0))
class MyThread(threading.Thread):
def __init__(self):
super(MyThread, self).__init__()
self.threadID = None
def run(self):
threading.Lock().acquire()
iter(self.threadID)
threading.Lock().release()
for x in range(3):
t = MyThread()
t.threadID = x
t.start()
Exception in thread Thread-2:
Traceback (most recent call last):
File "C:\Python25\lib\threading.py", line 462, in __bootstrap
self.run()
File "c:\Python-Coding\classTest1\threads.py", line 18, in run
iter(self.threadID)
File "c:\Python-Coding\classTest1\threads.py", line 10, in iter
print "thread [%d] - %s" % (thread, arr.pop(0))
IndexError: pop from empty list
Exception in thread Thread-3:
Traceback (most recent call last):
File "C:\Python25\lib\threading.py", line 462, in __bootstrap
self.run()
File "c:\Python-Coding\classTest1\threads.py", line 18, in run
iter(self.threadID)
File "c:\Python-Coding\classTest1\threads.py", line 10, in iter
print "thread [%d] - %s" % (thread, arr.pop(0))
IndexError: pop from empty list
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Python25\lib\threading.py", line 462, in __bootstrap
self.run()
File "c:\Python-Coding\classTest1\threads.py", line 19, in run
threading.Lock().release()
error: release unlocked lock
Офлайн
>>> import Queue
>>> help(Queue)
Офлайн
Ты эта… каждый раз создаешь новый объект блокировки.
threading.Lock().acquire()
threading.Lock().release()
l = threading.Lock()
.....
l.acquire()
.....
.release()
Офлайн