python – 扭曲线程如何避免深度复制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 扭曲线程如何避免深度复制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1558字,纯文字阅读大概需要3分钟。
内容图文
我有一个扭曲的服务器,它为每个请求执行一些“长”任务,所以我推迟每个调用的线程.在每个请求中,我访问一个公共资源,该资源在此过程中被更改.每个请求都应该以原始数据开头,因此我在公共资源上使用deepcopy(同时调用锁获取).它有效,但我认为它不够快.我觉得深度扫描会让事情变慢一些.
在处理具有资源突变的线程化扭曲服务器时,您有什么建议?
解决方法:
如果您愿意,您可以使用threading.Lock同步访问共享资源,就像在任何其他线程程序中一样,而不是复制它.
无论如何,我认为在使用和不使用深度复制的情况下对您的代码进行基准测试是值得的,并且在进行优化之前进行测量以确定性能的优劣.也许它变慢的原因与深度复制无关.
关于使用锁定的编辑:我的意思是你可以在这个资源周围使用更细粒度的锁定.我假设您的线程不仅仅是访问共享资源.您可以尝试从多个执行工作的线程中受益,然后将访问权限同步到仅涉及写入共享资源的“关键部分”.您还可以调查使您的共享资源线程安全.例如,如果有一个共享对象,SillyExampleFriendsList:
class SillyExampleFriendsList(object):
"""Just manipulates a couple lists"""
def __init__(self):
self._lock = threading.RLock()
self._friends = []
self._enemies = []
def unfriend(self, x):
# we lock here to ensure that we're never in a state where
# someone might think 'x' is both our friend and our enemy.
self._lock.acquire()
self._friends.remove(x)
self._enemies.append(x)
self._lock.release()
这里的要点只是通过小心使用锁可以在没有深度复制的情况下在多个线程之间共享上述对象.识别可能需要的所有情况并不是微不足道的,细粒度锁定策略可能更难以调试并且仍然会引入开销.
也就是说,您可能根本不需要线程,锁定或深度复制,如果没有对代码进行基准测试,则不清楚是否存在需要解决的性能问题.我很好奇是什么让你认为你的代码应该或者需要更快?
内容总结
以上是互联网集市为您收集整理的python – 扭曲线程如何避免深度复制全部内容,希望文章能够帮你解决python – 扭曲线程如何避免深度复制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。