我在Python中观察到一些极端奇怪的行为.请考虑以下代码:
from multiprocessing import Process
import scipy
def test():
pass
for i in range(1000):
p1 = Process(target=test)
p1.start()
p1.join()
print i
Run Code Online (Sandbox Code Playgroud)
当我在这上面运行strace -f时,我从循环中得到以下段:
clone(Process 19706 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2b23afde1970) = 19706
[pid 19706] set_robust_list(0x2b23afde1980, 0x18) = 0
[pid 18673] wait4(19706, Process 18673 suspended
<unfinished ...>
[pid 19706] stat("/apps/python/2.7.1/lib/python2.7/multiprocessing/random", 0x7fff041fc150) = -1 ENOENT (No such file or directory)
[pid 19706] open("/apps/python/2.7.1/lib/python2.7/multiprocessing/random.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 19706] open("/apps/python/2.7.1/lib/python2.7/multiprocessing/randommodule.so", O_RDONLY) = -1 ENOENT (No such file or …Run Code Online (Sandbox Code Playgroud) 我的目标是在 HoloViews 中创建 x、y、z 散点图,其中使用 Datashader 生成图,通过最小化“z”来聚合点,并根据“z”对点进行着色。最终这是为了做一些事情,比如生成轮廓似然图。
我使用 HoloViews + Datashader 生成绘图取得了不错的进展,甚至以很酷的方式链接绘图(参见例如如何在 HoloViews 中使用 Datashader + Bokeh 后端进行链接数据选择),但是我无法弄清楚如何控制点颜色和聚合方法。
下面是一些代码(在 Jupyter 笔记本中运行),它们(几乎)在“普通”Datashader + Bokeh 中完成了我想要的。如何通过 HoloViews 实现相同的功能,以便我可以利用该包中的出色功能?
请特别注意,我希望将颜色分配给特定的 z 值,我不希望它被自动归一化或任何此类事情。我试图在下面的代码中通过在 'shade' 函数中设置 'span' 参数来实现这一点,尽管它不太有效,因为当我放大绘图时,我看到新的绿色区域出现,这表明颜色的绝对标准化不是保持不变的。无论如何,它应该足够接近以说明我所追求的。
import pandas as pd
from bokeh.plotting import figure, output_notebook
import datashader as ds
from datashader.bokeh_ext import InteractiveImage
from datashader import transfer_functions as tf
output_notebook(hide_banner=True)
import matplotlib.colors as colors
#Define colormap
mn=0
mx=5
s0=0./(mx-mn)
s1=1./(mx-mn)
s2=2./(mx-mn)
s3=3./(mx-mn)
s4=4./(mx-mn)
s5=5./(mx-mn)
cdict = {
'red' : ((s0, 0., …Run Code Online (Sandbox Code Playgroud) 我有一个 C++ 项目,我正在为其开发 Python 接口。现在我正在使用pybind11因为它看起来很简洁,并且有一些很好的工具可以使用 CMake 构建扩展模块,这就是主要的 C++ 项目的构建方式。
通过 CMake 我设法获得了一个包含要构建的接口函数的共享库,但是现在我有了它我不知道如何告诉 Python 它存在并使其可导入。我不想重新配置要通过 Python 启动的整个项目构建(即如这里使用 setuptools 所述),因为它是一个大项目,我只是为它的一部分提供了一个 Python 接口。因此,如果我可以只为 Python 构建共享库以及其余的 C++ 代码,然后再运行“setup.py install”来执行其他任何需要使共享库可见的操作,那就更好了到 Python。
这可能吗?或者我是否需要进行一些其他类型的重构,例如让主项目构建一些其他纯 C++ 库,然后我只需将其链接到通过 setuptools 单独构建的 Python 扩展模块库?
我正在尝试使用我在其他函数中动态创建的函数进行一些多处理。如果提供给 ProcessPoolExecutor 的函数是模块级的,我似乎可以运行这些:
def make_func(a):
def dynamic_func(i):
return i, i**2 + a
return dynamic_func
f_dyns = [make_func(a) for a in range(10)]
def loopfunc(i):
return f_dyns[i](i)
with concurrent.futures.ProcessPoolExecutor(3) as executor:
for i,r in executor.map(loopfunc, range(10)):
print(i,":",r)
Run Code Online (Sandbox Code Playgroud)
输出:
0 : 0
1 : 2
2 : 6
3 : 12
4 : 20
5 : 30
6 : 42
7 : 56
8 : 72
9 : 90
Run Code Online (Sandbox Code Playgroud)
但是,如果多处理是由类函数启动的,我就不能这样做:
class Test:
def __init__(self,myfunc):
self.f = myfunc
def loopfunc(self,i):
return self.f(i)
def run(self): …Run Code Online (Sandbox Code Playgroud) 手册conda install页说
Conda attempts to install the newest versions of the requested
packages. To accomplish this, it may update some packages that
are already installed, or install additional packages.
Run Code Online (Sandbox Code Playgroud)
首先,这是否也适用于它确定需要安装或更新的依赖项?假设答案是“是”;这种行为可以改变吗?例如,在使用遗留代码时,尽可能少地更新依赖项或安装仍然有效的最旧版本的依赖项可能会很有用。有没有某种方法可以让 conda 依赖项解析器自动解决这个问题,或者在这种情况下是否必须手动找出依赖项更新?
或者也许我完全错了,这是默认行为?从文档中我不清楚依赖项解析规则。
python ×5
bokeh ×1
c++ ×1
conda ×1
datashader ×1
dependencies ×1
holoviews ×1
pickle ×1
pybind11 ×1
random ×1
scipy ×1
setuptools ×1
strace ×1