【问题标题】:Execute multiple functions at same time in Jython 2.5在 Jython 2.5 中同时执行多个功能
【发布时间】:2019-08-02 17:20:58
【问题描述】:

我正在尝试同时运行多个 Jython 文件,以便可以使用我的 PC 多处理器(特别是在 Hyperion 工作区的 FDM 中执行此操作)

有什么办法可以做到吗?

我试过用Java做,但是不识别线程函数,也用Python试过,这个版本的Jython没有并发库,无法导入。

import os
import sys
from java.io import *
from java.util import *
from java import *
from java.lang import *
from threading import *
import java.util.logging.Level;
import java.util.logging.Logger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;


new Thread() { 
    public void run() {
        java.lang.Runtime.getRuntime().exec("python test1.py")
    }
}.start()
new Thread() { 
    public void run() {
        java.lang.Runtime.getRuntime().exec("python test2.py")
    }
}.start()
new Thread() { 
    public void run() {
        java.lang.Runtime.getRuntime().exec("python test3.py")
    }
}.start()

错误:

File "E:\Oracle\Middleware\EPMSystem11R1\products\FinancialDataQuality\Applications\FDMEE/data/scripts/custom/test.py", line 15
    new Thread() {
       ^
SyntaxError: mismatched input 'Thread' expecting NEWLINE

【问题讨论】:

  • 出了什么问题?
  • 一旦你在 Python 文件中使用 Java 语法,但它也是不正确的 Java 语法。没有类,没有main方法。
  • jython Work 就是这样,不是吗?
  • 不,这不是 Jython 的工作方式。 Jython 是一个用 Java 编写的 Python 解释器。它解释 python 程序。您可以使用 python 中的 Java 库,仅此而已。不能用 Java 语法编写。
  • 哦,我明白了,谢谢

标签: java python concurrency parallel-processing jython


【解决方案1】:

您不能在 python 代码中使用 Java 语法。即使您使用 Jython 运行它。

您可以利用 Jython 将 python 函数转换为 Java 函数式接口这一事实。

from java.lang import Thread, Runtime


Thread(lambda: Runtime.getRuntime().exec("python test1.py")).start()
Thread(lambda: Runtime.getRuntime().exec("python test2.py")).start()
Thread(lambda: Runtime.getRuntime().exec("python test3.py")).start()

Pythonic 的方法是

import subprocess, threading

threading.Thread(target=lambda: subprocess.call(["python","test1.py"])).start()
threading.Thread(target=lambda: subprocess.call(["python","test2.py"])).start()

说实话,我会使用 multiprocessing 而不是 threading,但我不确定 Jython 是否支持它。

【讨论】:

  • 我不确定,但您的代码出现此错误: Traceback(最近一次调用最后一次):文件“”,第 528 行,在 executeJythonScript 文件“E:\Oracle\ Middleware\EPMSystem11R1\products\FinancialDataQuality\Applications\FDMEE/data/scripts/custom/test.py",第 4 行,在 线程中 (lambda: Runtime.getRuntime().exec("python test1.py")) .start() TypeError: java.lang.Thread(): 1st arg can't be coerced to java.lang.Runnable, String
  • 它适用于 Java 8 和 Jython 2.7。你用的是什么版本?
  • 我刚查了一下,Jython 2.5.2 中增加了python函数到Java单方法接口的自动转换
  • 嘿,我正在使用 Jython2.5 和 Java 6
  • @CamiloD'Achiardi 我已经编辑了我的答案,以展示如何在纯 Python 中做你想做的事情。这应该适用于 Jython 2.5(我在 Jython 2.5.1 上测试过)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
相关资源
最近更新 更多