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. [计] 模块;组件;模数。[网络] 模块;模;模组。[专业] 模块 [计算机科学技术];模块 [电子、通信与自动控制技术];构件 [农业科学]。