Tar*_*ula 7 python queue multiprocessing python-multithreading python-multiprocessing
我正在使用多处理做一些非常简单的事情:
data = {'a': 1}
queue.put(data, True)
data.clear()
Run Code Online (Sandbox Code Playgroud)
当我在另一个进程(使用get()方法)上使用队列时,我得到一个空字典.如果我删除data.clear()我得到按预期的键.有没有办法等待put()完成序列化?
实际上,这被认为是一个特征,而不是一个问题.队列立即返回,以便在序列化发生时继续进行,并避免所谓的" 队列争用 ".
我建议你有两个选择:
你绝对确定你首先需要可变的词典吗?而不是制作你正确看似不喜欢的数据的防御性副本,为什么不只是创建一个新的字典而不是使用dict.clear()并让垃圾收集器担心旧的字典?
自己腌制数据; 那就是:a_queue.put(pickle.dumps(data))和pickle.loads(a_queue.get()).现在,如果您data.clear()在a之后执行put,则数据已经"由您"序列化.
从并行编程的角度来看,第一种方法(将数据看作是不可变的)是长期更可行和更干净的事情,但我不确定是否或为什么必须清除字典.