欢迎来到朵拉利品网
知识中心
资讯
  • 资讯
  • 产品
  • 供应商
您的位置: 朵拉利品网 >  知识中心 > strp linux c strptime函数
strp linux c strptime函数
2019-08-23 04:22:34 来源:朵拉利品网

1, linux c strptime函数



char *strptime(const char *restrict buf, const char *restrict format, struct tm *restrict tm);
buf指向一个字符串格式的时间,函数将这个时间用format表示的格式解析,存放到tm中去
例子:
strptime("6 Dec 2001 12:33:45", "%d %b %Y %H:%M:%S", &tm);
返回值:
解析正确返回最后解析字符的下一个字符的地址,失败返回NULL
参考
看你的写法,是你理解错了.
tm中的年是时间与格林尼治时间的差表示的

3, python中,多线程情况下,time下的strptime()方法的bug谁能给我解...



因为strptime是用C写的:
static PyObject *
time_strptime(PyObject *self, PyObject *args)
{
PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime");
PyObject *strptime_result;
if (!strptime_module)
return NULL;
strptime_result = PyObject_CallMethod(strptime_module,
"_strptime_time", "O", args);
Py_DECREF(strptime_module);
return strptime_result;
}在函数里面用PyImport_ImportModuleNoBlock来import一个叫"_strptime"的module。PyImport_ImportModuleNoBlock的文档里说
"""
The function PyImport_ImportModuleNoBlock() never blocks. It first tries to fetch the module from sys.modules and falls back to PyImport_ImportModule() unless the lock is held, in which case the function will raise an ImportError
"""所以如果当你的一个线程正在import这个module却还没import完成的时候,!strptime_module判断不到,所以在执行到PyObject_CallMethod(strptime_module,"_strptime_time", "O", args)的时候,python发现strptime_module没有_strptime_time,就AttributeError了。
所以你在一个thread里用strptime之前,先用imp.acquire_lock()取得import lock,执行成功之后再imp.release_lock()应该就可以了。

相关概念


module

module,意思是宇宙飞船的分离舱。n. [计] 模块;组件;模数。[网络] 模块;模;模组。[专业] 模块 [计算机科学技术];模块 [电子、通信与自动控制技术];构件 [农业科学]。