【发布时间】:2021-11-04 02:19:52
【问题描述】:
我有一个内部循环 C 函数(在我的例子中)构造一个 Python datetime 对象:
PyObject* my_inner_loop_fn(void* some_data) {
PyObject* datetime = PyImport_ImportModule("datetime");
if (datetime == NULL) return NULL;
PyObject* datetime_date = PyObject_GetAttrString(datetime, "date");
PyObject* result = NULL;
if (datetime_date != NULL) {
/* long long my_year, my_month, my_day = ... ; */
PyObject* args = Py_BuildValue("(LLL)", my_year, my_month, my_day);
res = PyObject_Call(datetime_date, args, NULL);
Py_XDECREF(args);
}
Py_XDECREF(datetime_date);
Py_DECREF(datetime);
return result;
}
我的问题:
-
PyImport_ImportModule("datetime")是否每次都从头开始重新加载整个模块,还是缓存? - 如果没有缓存:
- 缓存它的首选方法是什么?
- 尝试导入其他模块的最早时间是什么时候是安全的?例如,我可以将其分配给全局变量吗?
我想避免为导入支付高昂的费用,因为该功能经常运行。以上预期是性能代码吗?
【问题讨论】:
标签: python python-import cpython python-c-api