标签: jython

纯python实现greenlet API

所述greenlet包由GEVENT和eventlet异步IO使用.它被编写为C-extension,因此不适用于Jython或IronPython.如果性能无关紧要,那么在纯Python中实现greenlet API的最简单方法是什么.

一个简单的例子:

def test1():
    print 12
    gr2.switch()
    print 34

def test2():
    print 56
    gr1.switch()
    print 78

gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()
Run Code Online (Sandbox Code Playgroud)

应该打印12,56,34(而不是78).

python ironpython jython

20
推荐指数
2
解决办法
3067
查看次数

Jython有GIL吗?

我确信它没有,但在Interwebs上寻找一个明确的答案让我有疑问.例如,我有一篇2008年的帖子,乍看之下看起来像个笑话,但看起来似乎很认真.

编辑: ...和被证明寻找更接近后一个笑话.对困惑感到抱歉.实际上,该帖子的评论回答了我的问题,正如Nikhil正确指出的那样.

我们意识到CPython在这方面远远领先于我们,而且我们缺乏兼容性.在经过严肃的头脑风暴(以及几杯葡萄酒)之后,我们决定在Jython中引入Global Interpreter Lock将解决整个问题!

现在,这里的状态是什么?sourceforge上的"差异"页面根本没有提到GIL.有没有我忽略的官方消息来源?

另请注意,我知道正在进行的讨论GIL是否重要,但我暂时并不关心.

python multithreading jython

19
推荐指数
3
解决办法
4883
查看次数

在Ubuntu上安装Jython

  1. 我从jython.org下载了jython_installer-2.5.2.jar.
  2. 打开终端并给出了这个命令: -

java -jar jython_installer-2.5.2.jar

  1. 它安装在jython2.5.2主目录中指定的文件夹中
  2. 但每当我打开终端并在终端中发出命令jython时,我都会看到一条消息,说明没有安装Jython.

我该如何解决这个问题?

我可以使用安装Jython sudo apt-get install jython,但Ubuntu存储库中的Jython是2.2.1,我想要新版本..

jython

19
推荐指数
2
解决办法
2万
查看次数

编写在CPython,Jython和IronPython中运行的python代码有哪些策略

尝试同时针对其中两个环境我可以安全地说,如果你必须使用数据库等,你最终必须为该环境编写唯一的代码.你有办法处理这种情况吗?

python ironpython jython cpython

16
推荐指数
2
解决办法
1261
查看次数

jython多线程

几个月前我开始学习python,然后我找到了Jython.

线程在Jython中是否正常工作,因为它没有GIL?如果是这样,你能推荐一本关于并发(线程)的好书吗?

python java multithreading jython

16
推荐指数
1
解决办法
4629
查看次数

Jython CLASSPATH,sys.path和JDBC驱动程序

如何在运行时将JDBC驱动程序添加到Jython?使用CLASSPATH工作,但使用sys.path不能与zxJDBC一起使用,即使该类导入正常并且可以从Jython解释器提示符进行操作.

为什么这样做:

$ CLASSPATH=/tmp/jtds\-1.2.5.jar ./jython
*sys-package-mgr*: processing new jar, '/private/tmp/jtds-1.2.5.jar'
Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54) 
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_20
Type "help", "copyright", "credits" or "license" for more information.
>>> from java.lang import Class
>>> Class.forName('net.sourceforge.jtds.jdbc.Driver')
<type 'net.sourceforge.jtds.jdbc.Driver'>
Run Code Online (Sandbox Code Playgroud)

但这不是吗?

$ ./jython

Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54) 
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_20
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.extend(['/tmp/jtds-1.2.5.jar'])
>>> from java.lang …
Run Code Online (Sandbox Code Playgroud)

jython jdbc classloader

15
推荐指数
2
解决办法
9605
查看次数

Scala和Jython的互操作性

我认为既然它们都运行在JVM上,Scala和Jython可以一起使用.他们的接口有多好?你能从Jython调用Scala库吗?那些来自Scala的Jython库呢?

interop jvm scala jython

15
推荐指数
1
解决办法
2223
查看次数

Redux:在Hadoop中运行时,如何让Jython在其自己的jar文件中使用存储在Lib中的Python模块?

我正在尝试使用Jython来实现Hadoop 1.2.1中的实现.除了陈旧的项目(比如code.google.com/p/happy)之外,我已经看到了很少关于Jython + Hadoop的事情,以及一个过时的实现$HADOOP_HOME/src/examples/python/WordCount.py,所以也许我正在吵着错误的树开始......但是这个似乎合情合理.我也非常了解Hadoop Streaming,我可以在不使用Jython的情况下在Hadoop中使用Python,但这不是我在这里要做的.

基本上,当我使用调用嵌入式/独立Jython的jar文件java -jar /full/path/to/myjythonjar.jar中,/full/path/to/myjythonjar.jar/Lib在我的Python sys.path,但是当我调用使用bin/hadoop jar /full/path/to/myjythonjar.jar input output...jar/Lib是不是在我的道路,并且脚本无法找到Python模块,我引用.

这就是我正在做的......

我正在使用Jython jar的独立版本,并使用该JarRunner界面,大致如此和其他地方所描述的那样; 基本如下:

 cp jython-standalone-2.7-b1.jar jythonsalib_test.jar  
 jar ufe jythonsalib_test.jar org.python.util.JarRunner __run__.py  
Run Code Online (Sandbox Code Playgroud)

也就是说,拿一个独立jar的副本,添加我的脚本名称__run__.py,然后更改Manifest来执行JarRunner- 非常感谢@Frank Wierzbicki为那个gem.

当我直接跑步时,这一切都很好,例如,

java -jar jythonsalib_test.jar
Run Code Online (Sandbox Code Playgroud)

我的sys.path报告包括'/full/path/to/jar/file/jythonsalib_test.jar/Lib',这正是我所期望的,它是我从中获取Python模块的路径(通过设置sys.path为空列表(失败)和仅通过路径(工作)进行经验测试).

当我在Hadoop中运行这个相同的jar时,例如,as

bin/hadoop jar /full/path/to/jar/file/jythonsalib_test.jar input output
Run Code Online (Sandbox Code Playgroud)

sys.path 只包括

['__classpath__', '__pyclasspath__']
Run Code Online (Sandbox Code Playgroud)

我还使用了Jython独立jar版本2.5.4-rc1(它具有上述相同的行为)和2.5.3(由于无关原因,这对我不起作用).

正如其他SO答案所指出的,我目前使用的解决方法基本上是直接添加我的jar的Lib目录,在Jython脚本里面

import sys
sys.path.append('/full/path/to/jar/file/jythonsalib_test.jar/Lib')
Run Code Online (Sandbox Code Playgroud)

这基本上有效 - 但这应该是一个分布式应用程序!我没有可以用这种方式引用的路径.其他SO文章提出了各种机制,但基本上都添加到库路径(再次,没有链接因为我有<10rep),如上面的Python,Java或Jython安装或Jython"注册表"(startup/rc)文件.当然,我可以使用HDFS或引导机制或其他机制将某些东西分发给计算节点,比如jar或Jython或其他什么,但代码已经在jar中了! 所以我不应该再单独分发它......

总而言之:看起来我需要在一个文件系统上,该文件系统可以直接并单独 …

python java hadoop jython

15
推荐指数
1
解决办法
1344
查看次数

为什么这次Jython循环在单次运行后会失败?

我有以下代码:

public static String getVersion() 
{
    PythonInterpreter interpreter = new PythonInterpreter();

    try 
    {
        interpreter.exec(IOUtils.toString(new FileReader("./Application Documents/Scripts/Version.py")));
        PyObject get_version = interpreter.get("get_latest_version");
        PyObject result = get_version.__call__(interpreter.get("url"));
        String latestVersion = (String) result.__tojava__(String.class);
        interpreter.close();
        return latestVersion;
    } catch (IOException ex) {
        ex.printStackTrace();
        interpreter.close();
        return Version.getLatestVersionOnSystem();
    }
Run Code Online (Sandbox Code Playgroud)

为了完整起见,我添加了Python代码:

import urllib2 as urllib
import warnings

url = 'arcticlights.ca/api/paint&requests?=version'

def get_latest_version(link=url):
    request = urllib.Request(link)
    handler = urllib.urllopen(request)
    if handler.code is not 200:
        warnings.warn('Invalid Status Code', RuntimeWarning)
    return handler.read()

version = get_latest_version()
Run Code Online (Sandbox Code Playgroud)

它完美无缺,但只有10%的时间.如果我用以下主要运行它:

public static void main(String[] args) …
Run Code Online (Sandbox Code Playgroud)

python java loops exception-handling jython

15
推荐指数
1
解决办法
1509
查看次数

如何将jars动态添加到jython内部脚本?

我在python中编写一个与ldap服务器通信的包.我希望它能在CPython和Jython中运行.为了使它与CPython一起使用,我已成功编写了针对python-ldap的代码.但是,要使它与Jython一起使用,我必须使用java jar.

我如何使用我的包分发jar文件,这样如果它可以"导入java",它就知道它的jython,并动态地将java jar添加到路径中并使用它.但是,如果失败,它会知道它的CPython并使用python-ldap库.

有任何想法吗?

jython

14
推荐指数
1
解决办法
1万
查看次数