我有 bytearray 对象,两个线程正在访问它,一个生产者和消费者。
生产者写入字节数组:
barr.extend(data)
消费者从字节数组中读取:
barr.find(...)
,barr[x:y]
生产者向字节数组添加了大量数据,所以我想偶尔通过
del barr[:last_read_pos]
释放内存
这个操作线程安全吗?
谢谢。
“这个操作线程安全吗?” “是”,但只是由于 GIL(全局解释器锁)。它实际上是不安全的,尽管它可以工作,但不应该这样做。只需使用锁 - 就足够轻松了。
或者,为此构建的队列:添加字节对象作为队列项,而不是扩展字节数组,然后使您的代码一次更简单、更高效,因为扩展字节数组涉及复制字节、重新分配字节有时整个数组,依此类推。