考虑到我想编写将在Google App Engine上运行的python代码以及jython内部的C代码,C扩展不是一个选项.Amara是一个不错的库,但由于它的C扩展,我不能将它用于这些平台中的任何一个.
在Jython中可以阻塞多线程/并行性的一些常见隐藏事物是什么?我有一些并行代码(使用Python的线程库),它不能扩展到超过3-4个CPU,我确信这不是因为任何这些明显的陷阱:
显式锁
调用需要同步的库代码(我尝试并行化的算法基本上是从头开始编写的,不使用任何库.)
基本上所有的算法都是一堆字符串处理,列表和字典查找和数学.我的理解是,与CPython不同,Jython没有GIL.
编辑
好的,菜鸟在这里请耐心等待.我想问的是以下内容:
我认为更清楚地表明我正在寻找什么.任何在行业中使用这些技术的人的意见都会非常有帮助.
提前感谢您的见解.
首先,这是正在工作的,然后我将描述什么不是:使用SWIG,我们已经采用了一些第三方代码,并创建了Java和C包装器源.创建了Java类的jar文件和C包装器代码的共享库.我们有一个Java代码库来加载共享库,并且能够根据需要调用本机代码.这是在Sun HostSpot JVM 1.5.0.14上运行的.不用担心.
现在,这不起作用:使用相同的JVM,带有Java包装器代码的jar文件和上面描述的相同共享库,我试图使用Jython来做一些脚本.CLASSPATH和LD_LIBRARY_PATH环境变量已正确设置.从Jython,我能够运行java.lang.System.loadLibrary(...),并加载共享库而不会出错.但是,当我在Jython脚本中为Java对象调用此库中的第一个本机方法时,我从JVM 获得了一个UnsatisfiedLinkError.
我在共享库上运行了nm,我发现有问题的方法存在于库中(对于JNI规范中描述的本机方法,名称为mangling).那么,问题是,什么可以阻止JVM解析方法名称?
我已经完成了JNI规范,我发现GC可以卸载一个库.在我调用方法之前会发生这种情况吗?还有什么可以导致这种失败?
我正在使用org.python.util.PythonInterpreter将Jython嵌入Java应用程序中.我使用的是Jython 2.5.2版.
我解释的python脚本包含UTF-8文字,因此我根据PEP-0263在脚本顶部添加了Python源代码编码:
# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)
我的脚本编译如下:
String script = // load from file as a single String ...
PythonInterpreter pi = new PythonInterpreter();
PyCode code = pi.compile(script);
result = pi.eval(code);
Run Code Online (Sandbox Code Playgroud)
然而,Jython抱怨以下痕迹:
[java] ... : encoding declaration in Unicode string
[java] at org.python.core.ParserFacade.prepBufReader(ParserFacade.java:277)
[java] at org.python.core.ParserFacade.parseExpressionOrModule(ParserFacade.java:119)
[java] at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:259)
[java] at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:256)
[java] at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:250)
Run Code Online (Sandbox Code Playgroud)
Jython是否支持脚本文件中的UTF-8?
我已经下载了"jython-installer-2.7-b1.jar".我想在Windows 7上安装它.我可以遵循哪些步骤?请指导我.
我知道jython可以用作virtualenv的python解释器.简单如下:
virtualenv -p /usr/local/bin/jython jython-env --no-site-packages
Run Code Online (Sandbox Code Playgroud)
假设我根本不想安装jython,而是使用独立的jar作为vitualenv的python解释器.这可能吗?
运用
我有total_lines一个jython命令的变量,我需要在ODI变量的刷新命令上访问它.
with open('file.txt') as file_name:
for total_lines, line in enumerate(file_name):
pass
print total_lines
total_lines += 1
Run Code Online (Sandbox Code Playgroud)
为此我想到了使用<@@>将它传递给Java Beanshell变量.像这样:在jython命令中:
<@int totallines = total_lines; @>
Run Code Online (Sandbox Code Playgroud)
在刷新命令中:
select '<@=totallines@>' from dual;
Run Code Online (Sandbox Code Playgroud)
这可能吗?如何将jython变量归属为beanshell变量?我有什么选择?
干杯
我试图找到一种方法来替换Pig在Hadoop上使用的jython-standalone-2.5.3.jar版本.Pig 12目前使用jython-standalone-2.5.3.jar,我正在尝试使用jython 2.7 beta4.更换jython版本并确保Pig识别出更改的好方法是什么.当我尝试更换jar时,Pig仍然在路径中有旧的jython jar,我正在尝试找到可以替换它的方法.该版本包含所有必需的库.我正在使用Hadoop v2.
我正在尝试使一个标准的Android应用程序执行一个可以将值返回给Java的python脚本,但我面临很多问题.
Jython在Android环境中不支持这一点,SL4A是一个死机项目,Kivi似乎是完全没有使用Java的完整堆栈框架,而QPython是适用于Android 5+但几乎没有文档的SL4A.
我想要的东西:
// From INSIDE my Java Code
new PythonEngine().execute('a = 1 + 1').getInt('a')
Run Code Online (Sandbox Code Playgroud)
使用QPython,我找到了一个执行任意代码的示例,但我无法想象如何获得结果以及如何在不打开等待用户输入返回的新活动的情况下运行脚本.
那可能吗?这个例子可以在这里找到QPython Java Sample
jython ×10
python ×3
java ×2
android ×1
apache-pig ×1
beanshell ×1
hadoop ×1
ironpython ×1
jvm ×1
jython-2.7 ×1
kivy ×1
pyjamas ×1
qpython ×1
sl4a ×1
swig ×1
virtualenv ×1
windows-7 ×1
xml ×1