在这种情况下,我应该使用 Python 还是 JSL 作为主要控制脚本?现在JMP可以和Python无缝对接,JSL和Python可以互相调用。
我有一个任务:
1. **接收并提取数据(py):**每分钟,用Python代码每3秒接收一次API的数据。实时从接收到的数据中提取结构化数据,存入内存数组A。立即将数据提取到另一个内存数组B中。然后立即清除内存数组A,准备下一批数据(这个处理时间足够,不会造成阻塞)。每分钟结束时,用Python代码新建一个JMP表(我们称之为表A),并将内存数组B中的结构化数据写入这个JMP表中。最后清除内存数组B。
2. **连接和选股(JSL):**使用 JSL 将新创建的 JMP 表 A 中的数据附加到现有的 JMP 表 B。在合并的表 B 上使用 JSL 中的技术指标执行选股计算。然后,关闭 JMP 表 A。
此过程不断重复。
以下两种方法哪种更适合这种情况,既注重稳定运行,又减少系统资源消耗?
A. 在单个总体 Python 脚本中,使用计时器连续运行数据接收/提取 (py) 和连接/股票选择 (JSL) 部分。
B. 在单个总体 JSL 脚本中,使用计时器连续运行数据接收/提取 (py) 和连接/股票选择 (JSL) 部分。
谢谢!
自动化和脚本视窗回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?DeepSeek R1 的

回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?grok3

回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?编写两个单独的程序并让它们都运行。您可以使用 JMP 通过 RunProgram 启动 Python,或者使用 Python 通过 Python 使用的任何东西启动 JMP。但要从 .py 和 .jsl 文件开始,然后手动运行它们,直到调试完成。
让 Python 代码将完成的工作放在带有时间戳文件名的目录中。如果工作堆积如山(因为其他工作人员失败了),则发出警报。
让 JSL 代码每 10 秒唤醒一次,使用 filesInDirectory 查找新工作。如果自发现任何工作以来已超过 2 分钟(因为其他工作程序失败),则发出警报。
在 Python 和 JMP 两种情况下,程序都设计为无限循环。您不应该制作一个不断重新启动它们的控制器。所有通信都是通过文件系统完成的,创建和删除文件。
文件写入器和文件读取器之间可能会发生竞争;如果 JMP 正在读取不完整的输出,则只需等到有两个文件可用,然后再处理倒数第二个文件。当然,这会晚一分钟。
回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?我可以附加一个关于同一一般主题的问题(可能很懒,抱歉)吗?
我有一个大型的 JSL 代码库(超过 10,000 行),可以对从机构 RDBMS 获得的大量自动每月数据下载进行各种顺序预处理、转换、解析和重新组织,每次下载的数据均包含十几个不同格式(xml、csv、xls 等)的文件。
我逐渐走向退休,我不想让我的代码和由此产生的非常有价值的干净、有用的 JMP 数据库被遗忘。然而,接手该项目的最佳同事都是 Python 程序员,他们对学习 JSL 并不感兴趣。
我的想法是将 JSL 代码分解为大小适中的逻辑模块(例如约 500 行代码),每个模块在整个过程中执行明确定义的步骤,并具有明确定义的输入和输出。然后,我将每个模块包装到某种 Python 包装器中,以便我的同事使用,避免必须了解 JSL 的细节。我还可能在 JSL 中包含一些 Python 钩子,当 JSL 遇到问题时,这些钩子可能允许他们提取基本的故障排除信息。
我的问题是:这个网站上有哪些最好的视频、白皮书、手册章节、讨论帖、书籍、研讨会等可以帮助我(一个完全的 Python 新手)弄清楚我正在寻找哪些类型的钩子和包装器...并附带以这种方式控制和“嗅探”现有 JSL 代码的 Python 代码示例。
这可能是无法回答的问题,但欢迎提出任何建议。
回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?@Paul_Nelson
回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?这些可能会给你一些想法
也许是这样,但从前面提到的开始
回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?将 JSL 分解为模块化、定义明确且有文档记录的组件是您可以做的最大也是最好的事情。
Python 脚本可以执行 jmp.run_jsl('' 脚本代码 '''),因此如果您的例程已制作成 JSL 函数,则可以从 Python 调用它们。如果您想更深入地了解,您需要学习 Python 来创建以 Python 程序员期望的方式运行的基于 Python 的对象。如果您可以使您的例程足够小并且有良好的文档记录,那么只要算法有良好的文档记录,它们就可以将 JSL 转换为 Python。
此外,JMP 中的 Python 支持随着每个版本的发布而不断改进,因此 18 中所需的解决方法可以在 JMP 19 或 20 中原生处理。JMP 18 和 19 当前的重点是数据互操作性。目前还没有 JSL 函数 Python Execute( ) 的 Python 等效函数,其中输入、输出和代码的列表会跨边界发送。可以模拟的最好方法是执行类似以下操作。
import jmp
jmp.run_jsl('''
...
Include("Path_to_file");
v1 = Python Get("py_var1");
v2 = Python Get("py_var2");
result = my_jsl_fn(v1,v2);
Python Send(result);
...
''')
19 中有一些支持与 Python 进行互操作的功能,即能够直接从 Python 获取/设置全局命名空间和命名空间变量,因此上述 Python Get() 在 JMP 19 及更高版本中可能不是必需的。
这对我们来说是一个很好的主题,可以更好地将 JSL 函数暴露给 Python 环境。
回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?我同意@Craige_Hales的观点,需要测试每条路径。当大数据和高性能发挥作用时,在您的环境中进行测试是无可替代的。没有测试和测量,就没有真正的捷径可以说一种比另一种更好。即便如此,性能调优技巧和窍门也可能针对每种语言。
有一些一般原则。
- 除非绝对必要,请勿处理、移动或复制数据。
- 注意代码的 O(),尽可能展开循环,避免 n^2 或更差的算法。
- 尽量减少关键区域的文件系统访问,并确保内存不会超出物理内存,否则您将交换到磁盘。
- 物理 RAM 与本地 SSD 与 HDD 与网络驱动器。
为了追求绝对的性能,您可能需要测试代码的某些部分,以查看 JSL 还是 Python 哪个执行速度更快。例如,将数据作为 numpy 数组或 pandas 数据框处理并一次性转换为数据表可能比在 JSL 中附加到大型数据表更快(我没有测试过这个,所以我不知道,我只是举个例子。)当性能至关重要时,您需要测试管道的每个主要组件。
回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?谢谢!!我已经下载了所有文件并开始深入研究!!!
回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?Paul,非常感谢。您的评论让我知道我的想法是正确的。我非常感谢您为 JMPing Pythons(或 Pythonic JMpers)所做的一切。我确信有很多大型、成熟的遗留 JSL 项目处于这种情况,它们不想被重写,但需要添加机制来“解开它们的拉链”,就像(原谅我)让 Python 人窥视内部一样。
非常感谢,约翰
回复:在这种情况下,我应该使用 Python 还是 JSL 作为主控制脚本?谢谢各位专家的解答。
我对一个复杂指标的计算,进行了Python和JSL的比较。
耗时相差近10倍。
我使用 JSL 时运行了完整矩阵。
由于我对Python不太熟悉,所以只能按照这个JSL逻辑,让各种AI用Python来实现。
结果表明,grok3修改效果最好。
