Несколько потоков могут добавлять элементы в список (это производители), и это всегда делается с помощью вызова append () (так, в конце списка):
self.threadCallQueue.append((f, args, kw))
Только основной поток когда-либо читает элементы и удаляет их из списка (это потребитель), и он всегда читает в начале списка:
# Keep track of how many calls we actually make, as we're
# making them, in case another call is added to the queue
# while we're in this loop.
count = 0
total = len(self.threadCallQueue)
for (f, a, kw) in self.threadCallQueue:
try:
f(*a, **kw)
except:
log.err()
count += 1
if count == total:
break
del self.threadCallQueue[:count]
Итак, поскольку один поток читает с начала списка, а другие пишут в конце, это потокобезопасно , пока списки Python . Это отмечено в исходном коде функции:
# lists are thread-safe in CPython, but not in Jython
# this is probably a bug in Jython, but until fixed this code
# won't work in Jython.