微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从java运行多线程的jython脚本?

我正在 Java中构建一个框架,该框架将监听事件,然后在Jython中处理它们.不同的事件类型将被发送到不同的脚本.

由于jython在调用PythonInterpreter.exec()时需要相当长的时间来编译脚本,所以我必须预编译脚本.我正在做以下的方式:

// initialize the script as string (would load it from file in final version)
String script = "print 'foo'";
// get the compiled code object
PyCode compiled = org.python.core.__builtin__.compile( script,"<>","exec" );

PyCode编译对象将被推送到存储库,并在事件进入时使用

pythoninterpreter pi = new pythoninterpreter();
pi.set( "variable_1","value_1");
pi.set( "variable_x","value_x");
pi.exec( compiled );

现在我的难题 – 可能会发生同时发生某些类型的多个事件 – 因此脚本同时运行的多个实例.

几乎所有的脚本可能会保持短暂 – 多达100行,没有循环.数字和频率是完全随机的(用户生成的事件),每个事件类型可以是每秒0到约200个.

做最好的方法是什么?我正在看几种可能性:

>在触发器事件点使用同步 – 这将阻止同一个脚本的多个实例,但事件也不会像应该那样快速地处理
>创建一个相同类型脚本的池,通过克隆原始的PyCode对象来填充,最大的问题可能是优化池大小
>在需要时动态地从父进程中克隆脚本对象,然后在exec()完成时将其丢弃 – 这样就可以从编译中删除滞后,但它仍然存在于克隆方法

2号和3号的组合可能是最好的 – 创建动态池大小?

那么,有什么想法吗?

原文地址:https://www.jb51.cc/java/124290.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐