当我尝试在 Cygwin 中执行操作时,我会得到
ValueError: semaphore or lock released too many times
我该怎么办?
pip install matplotlib
更新:
UPDATE:
$ pip install matplotlib
Downloading/unpacking matplotlib
You are installing an externally hosted file. Future versions of pip will default to disallowing externally hosted files.
You are installing a potentially insecure and unverifiable file. Future versions of pip will default to disallowing insecure files.
Downloading matplotlib-1.3.0.tar.gz (42.1MB): 42.1MB downloaded
Running setup.py egg_info for package matplotlib
============================================================================
Edit setup.cfg to change the build options
BUILDING MATPLOTLIB
matplotlib: yes [1.3.0]
python: yes [2.7.5 (default, Jul 30 2013, 14:34:22) [GCC
4.8.1]]
platform: yes [cygwin]
REQUIRED DEPENDENCIES AND EXTENSIONS
numpy: yes [version 1.7.1]
dateutil: yes [using dateutil version 2.1]
tornado: yes [tornado was not found. It is required for the
WebAgg backend. pip/easy_install may attempt to
install it after matplotlib.]
pyparsing: yes [pyparsing was not found. It is required for
mathtext support. pip/easy_install may attempt to
install it after matplotlib.]
pycxx: yes [Couldn't import. Using local copy.]
libagg: yes [pkg-config information for 'libagg' could not
be found. Using local copy.]
freetype: yes [version 16.1.10]
png: yes [version 1.5.14]
OPTIONAL SUBPACKAGES
sample_data: yes [installing]
toolkits: yes [installing]
tests: yes [nose 0.11.1 or later is required to run the
matplotlib test suite]
OPTIONAL BACKEND EXTENSIONS
macosx: no [Mac OS-X only]
qt4agg: no [PyQt4 not found]
Process PoolWorker-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 102, in worker
task = get()
File "/usr/lib/python2.7/multiprocessing/queues.py", line 378, in get
rrelease()
ValueError: semaphore or lock released too many times
此错误通常在使用
multiprocessing
或其他线程库并在 Cygwin 中运行时出现。这个问题源于 Cygwin 在处理进程分叉时存在一个已知问题,这可能会干扰这些库使用的底层信号量机制。
可以尝试以下几种解决方案:
1. 避免在 Cygwin 中使用
multiprocessing
:
-
如果可能,请在不使用
multiprocessing
的情况下重写代码。 对于某些用例,可以使用多线程(例如,使用threading
模块)或顺序编程来实现相同的结果,而不会遇到此问题。 -
如果无法避免
multiprocessing
,请考虑在不同的环境中运行的代码,例如 Windows 本地 Python 安装或 Linux 虚拟机。 这些环境通常对multiprocessing
有更好的支持,并且不太可能表现出此特定问题。
2. 使用
spawn
启动方法:
-
从 Python 3.4 开始,
multiprocessing
提供了一种名为spawn
的替代启动方法,该方法在 Cygwin 中可能更可靠。要使用此方法,请在的代码中设置multiprocessing
上下文:
import multiprocessing as mp
if __name__ == '__main__':
mp.set_start_method('spawn')
# 在这里放置使用 multiprocessing 的代码
3. 更新 Cygwin 和 Python:
- 确保运行的是最新版本的 Cygwin 和 Python。有时,升级到最新版本可以解决与 Cygwin 进程分叉相关的问题。
4. 报告错误:
-
如果问题仍然存在,请考虑向相关的项目(如 Cygwin、Python 或
matplotlib
)报告错误。提供有关的环境和重现步骤的详细说明可以帮助开发人员识别并解决问题。
请注意,这些解决方案可能并不总是有效,具体取决于的代码和环境的具体情况。如果问题仍然存在,可能需要探索其他解决方法或考虑在不同的环境中运行的代码。
标签:python,matplotlib,cygwin,pip From: 18525236