有没有一种方法可以在不使用python GIL的情况下进行序列化/反序列化

快速测试显示cPickle(Python 3.6.9 SELECT carmake,MAX( carsaleprice ) AS HighestPrice,MIN( carsaleprice ) AS LowestPrice,RANK() OVER ( ORDER BY MAX( carsaleprice ) DESC ) AS "RANK" FROM cars GROUP BY carmake ORDER BY HighestPrice defaults to using cPickle)与GIL接合。

import pickle

对运行序列化操作的4个线程的测试以100%cpu运行,例如它参与了GIL。运行numpy操作的同一类型的测试使用400%cpu(numpy没有使用GIL)。

我希望cPickle作为C函数,不会参与GIL。有没有办法解决?我希望能够反序列化大量数据而不会阻塞主进程。

我正在尝试每秒从辅助进程中提取3GB的数据回主服务器。我可以使用流套接字和异步以4GB /秒的速度移动数据,但是反序列化是一个瓶颈。 I don't have the luxury of Python 3.8和SharedMemory仍然很不幸。

当然,可以接受的答案是自信的答案。

newsatan 回答:有没有一种方法可以在不使用python GIL的情况下进行序列化/反序列化

从评论中获取@ juanpa.arrivillaga的答案以结束此问题:

我不明白为什么模块是C扩展这一事实应该使您认为它不会参与GIL。据我了解,GIL解决的根本问题是对依赖于引用计数进行垃圾收集的Python解释器级别对象的线程安全访问。由于pickle序列化/反序列化涉及其他线程可能访问的Python对象,因此必须使用GIL。

本文链接:https://www.f2er.com/3106826.html

大家都在问