博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
A solution to exception ‘ran out of input‘ when pickle loading
阅读量:4297 次
发布时间:2019-05-27

本文共 867 字,大约阅读时间需要 2 分钟。

by @taoqingqiu 

 

案发现场

 

故事发生在一个用于标注的 web tool 中,勤奋的用户竭尽全力地按下右键,待标注图片飞快地翻动,后台应接不暇地 pickle.load 某个与 image path 相关的变量。忽然,异常发生了。

 

image.png

 

image.png

 

原因

 

假设有一个叫 test.dict 的二进制文件,它存储了一个无关紧要的、可 pickle.load 的字典。执行如下代码:

 

import picklef_test = open('test.dict', 'rb')test_dict = pickle.load(f_test)test_dict_puppet = pickle.load(f_test)

 

则:

 

Traceback (most recent call last):  File "
", line 5, in
EOFError: Ran out of input

 

一切了然。

 

解决

 

当然,示例中的写法是为了探究原因刻意而为之,现实中,问题出现在多线程(或者多进程)同时 load 同一个变量时,解决方法可以是资源加锁,如下:

 

import pickle, fcntldef load_func(var_path: str):    """    a function will be used in mutiple threads.    """    result = None    if os.path.exists(var_path):        f_var = open(var_path, 'rb')        fcntl.flock(f_var, fcntl.LOCK_EX)  # 默认阻塞、互斥        result = pickle.load(f_var)        fcntl.flock(f_var, fcntl.LOCK_UN)  # 解锁后再释放        f_var.close()    return result

 

就这。

转载地址:http://fqbws.baihongyu.com/

你可能感兴趣的文章
Expanding User-Defined Runtime Attributes in Xcode with Objective-C
查看>>
iOS7 UITabBar自定义选中图片显示为默认蓝色的Bug
查看>>
提升UITableView性能-复杂页面的优化
查看>>
25 iOS App Performance Tips & Tricks
查看>>
那些好用的iOS开发工具
查看>>
iOS最佳实践
查看>>
使用CFStringTransform将汉字转换为拼音
查看>>
更轻量的 View Controllers
查看>>
Chisel-LLDB命令插件,让调试更Easy
查看>>
时间格式化hh:mm:ss和HH:mm:ss区别
查看>>
When to use Delegation, Notification, or Observation in iOS
查看>>
Objective-C Autorelease Pool 的实现原理
查看>>
编程语言大牛王垠:编程的智慧,带你少走弯路
查看>>
ios指令集以及基于指令集的app包压缩策略
查看>>
iOS开发者的福利 — — iOS9+Xcode7免越狱免证书直接调试
查看>>
3、JavaWeb学习之基础篇—JSP
查看>>
4、JavaWeb学习之基础篇—Session
查看>>
5、JavaWeb学习之基础篇—标签(自定义&JSTL)
查看>>
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>