У меня есть поток, который обновляет список под названием l
. Правильно ли я говорю, что это поточно-безопасное выполнение следующего из другого потока?
filter(lambda x: x[0] == "in", l)
Если это не безопасный поток, то это правильный подход:
import threading
import time
import Queue
class Logger(threading.Thread):
def __init__(self, log):
super(Logger, self).__init__()
self.log = log
self.data = []
self.finished = False
self.data_lock = threading.Lock()
def run(self):
while not self.finished:
try:
with self.data_lock:
self.data.append(self.log.get(block=True, timeout=0.1))
except Queue.Empty:
pass
def get_data(self, cond):
with self.data_lock:
d = filter(cond, self.data)
return d
def stop(self):
self.finished = True
self.join()
print("Logger stopped")
где метод get_data(self, cond)
используется для извлечения небольшого подмножества данных в self.data безопасным потоком.