0

これは私のコールバック関数で、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:]

しかし、私は同期を行いませんでした!リストの操作がクラッシュしないことを確認できますか?ありがとう!

4

1 に答える 1

1

CPythonでは、実行の解釈された性質と、グローバルインタープリターロック(単一のスレッドからの単一のバイトコードのみが常に実行されることを保証する)により、これは安全です。

しかし、他のPython実装は非常に寛容かもしれません...

于 2012-12-02T08:32:46.410 に答える