- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我了解,Modules/_multiprocessing/semaphore.c
实现了用于实现 multiprocessing.synchronize.SemLock
的内部 Python 对象 SemLock在 Python 标准库中:
class SemLock(object):
def __init__(self, kind, value, maxvalue, *, ctx):
(...A lot of other code...)
sl = self._semlock = _multiprocessing.SemLock( # <-- Here.
Modules/_multiprocessing/semaphore.c
通过在 C 中定义一个 SemLockObject 并将其导出为 SemLock 来实现这个内部 SemLock 对象 在 Python 中。
这是 C 定义:
typedef struct {
PyObject_HEAD
SEM_HANDLE handle;
unsigned long last_tid;
int count;
int maxvalue;
int kind;
char *name; /* <--- It has 'name'. */
} SemLockObject;
稍后 SemLockObject 被导出为 SemLock,在 Line #617 中:
PyTypeObject _PyMp_SemLockType = {
PyVarObject_HEAD_INIT(NULL, 0)
/* tp_name */ "_multiprocessing.SemLock",
/* tp_basicsize */ sizeof(SemLockObject),
与 SemLock 一起,还导出了几个 _semlock_members_,包括“name”。参见 Line #608 :
static PyMemberDef semlock_members[] = {
{"handle", T_SEM_HANDLE, offsetof(SemLockObject, handle), READONLY,
""},
{"kind", T_INT, offsetof(SemLockObject, kind), READONLY,
""},
{"maxvalue", T_INT, offsetof(SemLockObject, maxvalue), READONLY,
""},
{"name", T_STRING, offsetof(SemLockObject, name), READONLY,
""}, /* <--- Here it is. */
{NULL}
};
因此,有理由相信我可以在运行时访问name 成员。但是,当我检查此内部 SemLock 对象的成员时,我没有看到 name 成员。这是我的检查代码:
import multiprocessing as mp
import inspect
lock = mp.Semaphore(1)
members = inspect.getmembers(lock._semlock)
for (name, _) in members:
print name
结果如下:
SEM_VALUE_MAX
__class__
__delattr__
__doc__
__enter__
__exit__
__format__
__getattribute__
__hash__
__init__
__new__
__reduce__
__reduce_ex__
__repr__
__setattr__
__sizeof__
__str__
__subclasshook__
_after_fork
_count
_get_value
_is_mine
_is_zero
_rebuild
acquire
handle <-- 'handle' is defined in 'semlock_members'
kind <-- 'kind' is defined in 'semlock_members'
maxvalue <-- 'maxvalue' is defined in 'semlock_members'
release
但是 name 在哪里??
事实上,如果我们看一下multiprocessing.synchronize.SemLock.__init__
Line #76 ,它测试 _semlock.name
的值:
if self._semlock.name is not None:
这让我觉得底层的 _semlock 有 'name' 成员,否则代码会引发类似“AttributeError: '_multiprocessing.SemLock' object has no attribute 'name'” 的异常。
我一定是漏掉了什么地方。有人能帮我指出吗??
最佳答案
您使用的是 Python 2.7,但查看的是 Python 3.7 源代码。参见 2.7's semlock_members .
关于python-2.7 - 为什么 Python 的 _multiprocessing.SemLock 没有 'name' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44036757/
我编写了一个 python 应用程序(使用 wxPython;py2exe;python 2.6)。 现在我的代码正在使用多处理模块。有用! (IDE) 当我尝试构建此代码时,没有遇到任何问题。但是当
我目前正在将一些使用 pypy 运行的 Python 2 代码移植到 python 3。我在处理一些使用 _multiprocessing 的代码时遇到了一些困难,因为文档很难找到这个。 from _
我有一个使用 multiprocessing 的短代码打包并在我的本地机器上正常工作。 当我上传到 AWS Lambda并在那里运行,我收到以下错误(已修剪堆栈跟踪): [Errno 38] Func
我的环境 python 2.7.3 Ubuntu 14.04 我使用的源代码:CPython on GitHub 了解我的问题的更多背景信息 据我了解,Modules/_multiprocessing
查询:Python 有没有办法说: 不要使用 /dev/shm 进行共享内存存储,而应使用其他临时位置,例如 /tmp。 或 使用 threading.Lock 代替 multiprocessing.
我是一名优秀的程序员,十分优秀!