澄清:根据一些评论,我应该澄清这是一个简单的框架,允许执行自然并行的程序(所谓的令人尴尬的并行程序).它不是,也永远不会是需要在进程之间进行通信或同步的任务的解决方案.
我一直在寻找一个简单的基于流程的并行编程环境,它可以在Python上的多个CPU上执行函数,主要标准是它需要能够执行未经修改的Python代码.我发现最接近的是Parallel Python,但是pp会做一些非常时髦的事情,这会导致代码无法在正确的上下文中执行(导入适当的模块等).
我终于厌倦了搜索,所以我决定写自己的.我想出的其实很简单.问题是,我不确定我提出的内容是否简单,因为我没有想到很多事情.这是我的程序的作用:
通过传递如下所示的字典,将作业分发给侦听节点的服务器:
{
'moduleName':'some_module',
'funcName':'someFunction',
'localVars': {'someVar':someVal,...},
'globalVars':{'someOtherVar':someOtherVal,...},
'modulePath':'/a/path/to/a/directory',
'customPathHasPriority':aBoolean,
'args':(arg1,arg2,...),
'kwargs':{'kw1':val1, 'kw2':val2,...}
}
Run Code Online (Sandbox Code Playgroud)moduleName并且funcName是强制性的,其他是可选的.
节点服务器接受此字典并执行:
sys.path.append(modulePath)
globals()[moduleName]=__import__(moduleName, localVars, globalVars)
returnVal = globals()[moduleName].__dict__[funcName](*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)在获取返回值时,服务器然后将其发送回作业服务器,该服务器将其放入线程安全队列中.
我确信有一些需要解决的问题,但这种方法有什么明显的错误吗?乍一看,它似乎很健壮,只需要节点可以访问包含.py文件和依赖项的文件系统.使用__import__的优点是模块中的代码是自动运行的,因此函数应该在正确的上下文中执行.
任何建议或批评将不胜感激.
编辑:我应该提到我已经有代码执行位工作,但服务器和作业服务器尚未编写.
我知道谷歌护目镜会将图片翻译成文字.我想要做的是允许用户拍照(没问题),将该图片翻译成文本(?)然后对文本进行一些处理(没问题).
android上有没有允许这个的API?或者有没有办法与谷歌护目镜进行程序化沟通?我不想让用户使用护目镜然后用我的应用程序选择保存的文件.....
Psyco的文档说:
仅供参考,Psyco根本不适用于任何64位系统.这个事实值得再次注意,现在最新的Mac OS/X 10.6"Snow Leopart"带有64位机器上的64位默认Python.在OS/X 10.6上使用Psyco的唯一方法是在32位模式下重新编译自定义Python.
通常,当代码假定指针类型和其他类似的小(ish)问题具有特定大小时,将程序从32位移植到64位只是一个问题.考虑到Psyco不是很多代码(大约32K行的C + ~8K系列的Python),它有多难?有没有人试过这个并撞墙?我还没有机会好好看看Psyco的来源,所以我真的很感激知道我是否在浪费时间研究这个......
我使用ctypes为单元库编写了Python绑定.绑定本身只有~100行Python.该库有一个不必要的(为了Python绑定的目的)依赖于tcl,如果没有tcl,配置脚本将失败.但是,该库可以很好地构建gcc -Wl,-soname,units.so -o units.so -fPIC -shared units.c.
我现在想发布这些绑定.我有三种方法可以做到这一点.
如果我选择选项2,我应该在哪里放置库?我应该把它放在与.py文件相同的目录中,允许我假设lib_name = CDLL('./units.extension'),还是应该把它放在一个往往在链接器路径中的目录(比如/ lib)?另外,对于Windows机器,这通常如何处理,a)可能没有C编译器,b)没有标准位置来放置共享库?
哪些选项是首选,我应该怎么做Windows案例?
我有一个中等大片(几千行)的Python/Numpy/Scipy代码,它会抛出带有某些输入的NaN.我寻找并找到了一些常见的嫌疑人(log(0)等等),但在这种情况下,没有一个明显的嫌疑人似乎是罪魁祸首.
是否有一种相对无痛的方式(即,除了在每个潜在的罪魁祸首周围设置异常处理代码之外),找出这些NaN的来源?
偶尔,我会想在我的Android设备上编辑一个文件,比如/system/build.prop或/ etc/hosts.我发现最简单的方法是:
c:\> adb shell
$ su
# vi /etc/hosts
Run Code Online (Sandbox Code Playgroud)
如果我使用Linux,这可以正常工作.但是,尝试在使用Windows时在手机上运行vi会导致带有奇怪字符的borked vi屏幕.我假设这是因为cmd不支持ANSI控制字符.
有没有办法解决这个问题(例如,一个cmd替代方案可以解决这个问题)?
看起来好像matplotlib.tri.Triangulation使用了一个错误的,可能是错误的Delaunay三角测量实现,这个实现将被qHull取代.
我试图绘制一个trisurf使用mpl_toolkits.mplot3d.plot_trisurf()并遇到一堆无用的异常(主要是IndexErrors和KeyErrors,没有指出到底出了什么问题).
既然scipy.spatial.Delaunay已经使用了qHull,我想知道是否有一种方法可以使用scipy实现Delaunay三角测量来构建一个matplotlib.tri.Triangulation对象mpl_toolkits.mplot3d.plot_trisurf().
我已经尝试delaunay.points直接matplotlib.tri.Triangulate通过triangles参数传递,但这导致了一个ValueError: triangles min element is out of bounds.
我目前正在编写一个更改某些网络配置文件的Python应用程序.该应用程序需要在Ubuntu 10.04到13.10上运行.问题是,NetworkManager在不同的版本上以不同的方式被破坏(尽管它们似乎最终在13.04+中修复了它),这导致我的应用程序不兼容.
我已经找出每个版本的问题并为它们开发了解决方法,我只是不确定最好的方法是检测用户运行的是哪个版本的Ubuntu.
到目前为止,我提出的最佳解决方案是解析输出lsb_release -a,但这似乎是一个相当脆弱的解决方案,可能会失败的Ubuntu派生的发行版,如Mint甚至可能与一些"官方"变体(Kubuntu,Xubuntu等).
有没有一种很好的方法来检测给定Linux发行版的基本发行版和版本,以便我可以根据我的应用程序在该版本上做出的选择?
我正在尝试编写一个文档测试工具,用于检查文档字符串是否与实际函数签名(除其他外)匹配。然而,我遇到了一些障碍。我找不到一种方法来确定给定函数是否属于一个类。
import inspect
def func1():
pass
class Foo:
def method(self):
pass
print(inspect.ismethod(func1)) # prints False
print(inspect.ismethod(Foo().method)) # prints True
print(inspect.ismethod(Foo.method)) # prints False - I want something that prints True here
Run Code Online (Sandbox Code Playgroud)
问题是方法通常将self其作为第一个参数,而这从未被记录(出于明显的原因)。这会导致我的测试失败,因为它们会遇到未记录的参数。
我宁愿不显式检查第一个参数是否被调用self并跳过它,因为a)没有什么可以阻止函数调用参数self,b)名称self本身是一个约定问题(所以你可以有一个带有第一个参数的方法)称为this_is_definitely_not_self) 的参数,我的工具在任何一种情况下都会失败。我也不能只初始化一个对象并检查该函数是否是一个方法,因为对于任何在其__init__.
所以问题是,有什么方法可以在函数实际绑定到对象之前检测它是否是方法?或者我是否需要只检查第一个参数是否被调用self?
python ×7
android ×2
scipy ×2
64-bit ×1
adb ×1
algorithm ×1
c ×1
chess ×1
debugging ×1
delaunay ×1
linux ×1
matplotlib ×1
nan ×1
numpy ×1
ocr ×1
porting ×1
psyco ×1
python-2.x ×1
python-3.x ×1
reflection ×1
release ×1
statistics ×1
ubuntu ×1
vi ×1
windows ×1