Используя numpy.select
:
c1 = sd[0].eq(0)
c2 = dd.eq(0).all(1)
res = np.select([c1, c2], [0, 'OK'], dd.where(dd.ne(0)).mean(1))
pd.Series(res)
0 0
1 0.3333333333333333
2 -0.3333333333333333
3 0.5
4 0.65
5 OK
6 0
dtype: object
Модуль Очереди является Python, хорошо подходит для того, что Вы описываете.
Вам можно было создать одну очередь, которая совместно используется всеми Вашими потоками. Потоки, которые обрабатывают сетевые события, могут использовать queue.put для регистрации событий на очередь. Логический поток использовал бы queue.get для получения событий от очереди.
import Queue
# maxsize of 0 means that we can put an unlimited number of events
# on the queue
q = Queue.Queue(maxsize=0)
def network_thread():
while True:
e = get_network_event()
q.put(e)
def logic_thread():
while True:
# This will wait until there are events to process
e = q.get()
process_event(e)
Я не действительно уверен, что Вы ищете. Но нет, конечно, никакого встроенного синтаксиса для этого. Взгляните на модули поточной обработки и очередь. Существует много полезного материала как Очереди, Условия, События, Блокировки и Семафоры, которые могут использоваться для реализации всего вида синхронных передач и асинхронной передачи.