Python:在回调函数中使用全局列表

时间:2012-12-02 08:28:06

标签: python

这是我的回调函数,我将rcv_buffer设置为全局

def rx_callback(ok, payload):
    global n_rcvd, n_right, rcv_buffer
    n_rcvd += 1
    (pktno,) = struct.unpack('!H', payload[0:2])
    if ok:
        n_right += 1
        rcv_buffer.append((pktno, payload))

在main()中,我不断检查缓冲区以查看缓冲区是否为空:

   while 1:
        while len(rcv_buffer) > 0:
            (pktno, payload) = rcv_buffer.pop(0)
            print 'pktno = ', pktno, 'payload = ', payload[2:]

但我没有做任何同步!我可以确定列表中的操作不会崩溃吗?谢谢!

1 个答案:

答案 0 :(得分:1)

在CPython中,由于执行的解释性质,并且由于Global Interpeter Lock(确保在任何给定时间只执行单个线程中的单个字节码),这是安全的。

其他Python实现可能非常宽容......