我试图在PyCharm(2.7.3)中使用与python 2和3并排的鼻子测试.
在python 2.7下一切正常,但是python 3.4中的任何测试都会失败并出现以下错误:
Traceback (most recent call last):
File "/home/robert/Programme/pycharm-2.7.3/helpers/pycharm/noserunner.py", line 91, in <module>
process_args()
File "/home/robert/Programme/pycharm-2.7.3/helpers/pycharm/noserunner.py", line 88, in process_args
TestProgram(argv=argv, config=config)
File "/usr/local/lib/python3.4/dist-packages/nose/core.py", line 121, in __init__
**extra_args)
File "/usr/lib/python3.4/unittest/main.py", line 93, in __init__
self.runTests()
File "/usr/local/lib/python3.4/dist-packages/nose/core.py", line 207, in runTests
result = self.testRunner.run(self.test)
File "/usr/local/lib/python3.4/dist-packages/nose/core.py", line 62, in run
test(result)
File "/usr/local/lib/python3.4/dist-packages/nose/suite.py", line 177, in __call__
return self.run(*arg, **kw)
File "/usr/local/lib/python3.4/dist-packages/nose/suite.py", line 224, in run
test(orig)
File "/usr/local/lib/python3.4/dist-packages/nose/suite.py", line 177, in __call__
return self.run(*arg, **kw) …Run Code Online (Sandbox Code Playgroud) 在不确切知道它们所附加的记录器的情况下,如何找到所有日志记录处理程序?
是
import logging
logging._handlerList
Run Code Online (Sandbox Code Playgroud)
安全的?
或者我真的必须通过所有记录器
logging.Logger.manager.loggerDict.keys()
Run Code Online (Sandbox Code Playgroud)
并手动获取记录器的处理程序?
如何在德语键盘布局的IPython Notebook中阻止对选定文本的注释?Ctrl- /不起作用,在德语键盘上实际上是Ctrl-Shift-7。
我对python(2.7)list.remove函数感到有点困惑.在删除它的文档中说:"从列表中删除值为x的第一个项目.如果没有这样的项目,则会出错."
所以,我猜这里的价值意味着比较是基于平等(即==)而非基于身份(即is).但是,有人可以向我解释以下行为.显然,两种比较都被使用,但是以一种相当奇怪的方式:
import numpy as np
x = np.array([1,2,3])
mylist = [x, 42, 'test', x] # list containing the numpy array twice
print mylist
Run Code Online (Sandbox Code Playgroud)
当然,这将打印:
[array([1, 2, 3]), 42, 'test', array([1, 2, 3])]
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但奇怪的是,以下代码执行:
mylist.remove(x)
print mylist
Run Code Online (Sandbox Code Playgroud)
给
[42, 'test', array([1, 2, 3])]
Run Code Online (Sandbox Code Playgroud)
我希望它会抛出一个错误,因为numpy数组不返回布尔语句而是返回布尔数组.例如,x == x退货array([ True, True, True], dtype=bool).然而,我们的移除愉快地执行.但是,再次调用相同的语句会产生预测的行为:
mylist.remove(x)
Run Code Online (Sandbox Code Playgroud)
抛出一个
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-835a19b5f6a9> …Run Code Online (Sandbox Code Playgroud) 我必须pandas.DataFrame逐行处理一个巨大的(几十GB),每行操作都很长(几十毫秒).所以我有了将框架拆分成块并使用并行处理每个块的想法multiprocessing.这确实加快了任务,但内存消耗是一场噩梦.
虽然每个子进程原则上只占用一小部分数据,但它需要(几乎)与包含原始进程的原始父进程一样多的内存DataFrame.即使删除父进程中使用过的部分也无济于事.
我写了一个复制这种行为的最小例子.它唯一能做的就是创建一个DataFrame带有随机数的大块,将它分成最多100行的小块,然后简单地打印一些关于DataFrame多处理过程中的信息(这里通过mp.Pool4号大小).
并行执行的主要功能:
def just_wait_and_print_len_and_idx(df):
"""Waits for 5 seconds and prints df length and first and last index"""
# Extract some info
idx_values = df.index.values
first_idx, last_idx = idx_values[0], idx_values[-1]
length = len(df)
pid = os.getpid()
# Waste some CPU cycles
time.sleep(1)
# Print the info
print('First idx {}, last idx {} and len {} '
'from process {}'.format(first_idx, last_idx, length, pid))
Run Code Online (Sandbox Code Playgroud)
辅助生成器将一个块DataFrame分成小块:
def df_chunking(df, …Run Code Online (Sandbox Code Playgroud) 有一个简单的方法来改变一个kubernetes时间表的cronjob喜欢kubectl change cronjob my-cronjob "10 10 * * *"?或者任何其他方式而不需要做kubectl apply -f deployment.yml什么?后者在复杂的CI/CD设置中可能非常麻烦,因为通常不需要手动编辑部署yaml,尤其是在文件是在构建过程中从模板创建的情况下.
或者,有没有办法手动启动cronjob?例如,一项工作计划在22小时内开始,但是我想现在手动触发一次而不改变cron时间表(用于测试或初始运行)?
在国际热核实验堆函数封装像列表或元组对象,以便将它们作为迭代器,即一个能够使用next,例如。例如,
next(iter([1, 2, 3]))
Run Code Online (Sandbox Code Playgroud)
返回1。
如果我们传递给的对象iter已经是迭代器,内部会发生什么?它是否只是返回原始对象,即无操作?还是产生一个包装原始迭代器的新迭代器?当然,包装并不是指复制原始的迭代器。
有时将多处理池与管理器和 Python 3.4 结合使用,lock.acquire()会抛出一个奇怪的TypeError: an integer is required (got type NoneType).
有几次这出现在我的 Travis 测试套件上,我无法弄清楚它来自哪里以及它意味着什么。更糟糕的是,我无法可靠地重现它,它只是发生或不发生。通常它不是,而是每一百次运行一次左右它确实:-(。
我完全迷失了。也许有人以前遇到过这样的事情,并且可以提示在哪里寻找错误的来源。让我从完整的回溯开始:
Traceback (most recent call last):
File "/home/travis/miniconda/envs/test-environment/lib/python3.4/multiprocessing/pool.py", line 119, in worker
result = (True, func(*args, **kwds))
File "/home/travis/miniconda/envs/test-environment/lib/python3.4/site-packages/pypet-0.1b10.dev0-py3.4.egg/pypet/environment.py", line 150, in _single_run
traj._store_final(store_data=store_data)
File "/home/travis/miniconda/envs/test-environment/lib/python3.4/site-packages/pypet-0.1b10.dev0-py3.4.egg/pypet/trajectory.py", line 3271, in _store_final
store_data=store_data)
File "/home/travis/miniconda/envs/test-environment/lib/python3.4/site-packages/pypet-0.1b10.dev0-py3.4.egg/pypet/storageservice.py", line 295, in store
self.acquire_lock()
File "/home/travis/miniconda/envs/test-environment/lib/python3.4/site-packages/pypet-0.1b10.dev0-py3.4.egg/pypet/storageservice.py", line 284, in acquire_lock
self._lock.acquire()
File "/home/travis/miniconda/envs/test-environment/lib/python3.4/multiprocessing/managers.py", line 958, in acquire
return self._callmethod('acquire', args)
File "/home/travis/miniconda/envs/test-environment/lib/python3.4/multiprocessing/managers.py", line 731, in _callmethod …Run Code Online (Sandbox Code Playgroud) python locking multiprocessing python-3.4 python-multiprocessing
让我们假设我将 Flask 与文件系统缓存与 uWSGI 或 gunicorn 结合使用,它们中的任何一个都启动多个进程或工作程序。所有这些进程共享同一个缓存吗?或者换个方式问,无论进程 pid、线程状态等如何,函数和参数是否总是评估为相同的缓存键?
例如,请考虑以下最小示例:
import time
from flask import Flask, jsonify
from flask_caching import Cache
app = Flask(__name__)
cache = Cache(app, config={
'CACHE_TYPE': 'filesystem',
'CACHE_DIR': 'my_cache_directory',
'CACHE_DEFAULT_TIMEOUT': 3600,
})
@cache.memoize()
def compute(param):
time.sleep(5)
return param + 1
@app.route('/')
@app.route('/<int:param>')
def main(param=41):
expensive = compute(param)
return jsonify({"Hello expensive": expensive})
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
将www.example.com/41只需要5秒一次,然后(3600秒)可立即无论uWSGI的或gunicorn工人?
我在 Docker 容器内的 Flask 应用程序中运行 joblib,以及由 supervisord 启动的 uWSGI(从启用线程开始)。
网络服务器的启动显示以下错误:
unable to load configuration from from multiprocessing.semaphore_tracker import main;main(15)
/usr/local/lib/python3.5/dist-packages/sklearn/externals/joblib/_multiprocessing_helpers.py:38: UserWarning:
[Errno 32] Broken pipe. joblib will operate in serial mode
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题并使 joblib 并行运行吗?谢谢!
docker 容器中安装了以下包:
pytest==4.0.1
pytest-cov==2.6.0
flake8==3.6.0
Cython==0.29.3
numpy==1.16.1
pandas==0.24.0
scikit-learn==0.20.2
fancyimpute==0.4.2
scikit-garden==0.1.3
category_encoders==1.3.0
boto3==1.9.86
joblib==0.13.1
dash==0.37.0
dash-renderer==0.18.0
dash-core-components==0.43.1
dash-table==3.4.0
dash-html-components==0.13.5
dash-auth==1.3.2
Flask-Caching==1.4.0
plotly==3.6.1
APScheduler==3.5.3
Run Code Online (Sandbox Code Playgroud)
问题要么是由于 uWSGI、nginx 或 supervisord。缺少权限dev/shm不是问题,因为如果我直接运行 Flask 服务器,可以创建信号量。在下面找到三个服务的配置文件。免责声明,我是网络服务器新手,配置是通过从不同的博客复制和粘贴而产生的,只是为了使其工作:-D
所以这是我的 uwsgi 配置:
[uwsgi]
module = prism_dash_frontend.__main__
callable = server
uid = nginx
gid …Run Code Online (Sandbox Code Playgroud) python ×7
flask ×2
uwsgi ×2
arrays ×1
caching ×1
comments ×1
cron ×1
docker ×1
equality ×1
gunicorn ×1
iterator ×1
joblib ×1
kubectl ×1
kubernetes ×1
list ×1
locking ×1
logging ×1
memory ×1
nose ×1
nosetests ×1
numpy ×1
pandas ×1
pycharm ×1
python-2.7 ×1
python-3.4 ×1
python-3.5 ×1
python-3.x ×1