【问题标题】:2-way interop/IPC between SWI Prolog & PythonSWI Prolog 和 Python 之间的 2 路互操作/IPC
【发布时间】:2021-01-16 05:31:48
【问题描述】:

有可以从 Python (pyswip) =to=> Prolog 调用的模块,但是有没有办法从 Prolog =to=> Python 调用另一种方式?

我需要它,所以我可以从 SWI-Prolog 调用 Spacy-NLP 模块


找不到 SWI 是否支持 ZeroMQ。

【问题讨论】:

标签: python interop ipc zeromq swi-prolog


【解决方案1】:

这是文件“c:\hello.py”中的示例 Python 代码,它在命令行中提取参数 q(可选)。它的结果被回显到标准输出流。

import sys
def hello():
    return 'hello world: ' + ','.join(sys.argv[1:])
if __name__ == '__main__':
    print(hello())

这是文件“c:\hello.pl”中的序言程序,将上述python代码作为进程调用:

do :-
    process_create(path('python3.7'),
                   ['c:/hello.py', foo, bar],
                   [stdout(pipe(In))]), %output stream named In
    read_string(In, Len, X), %In=input stream to read_string/3
    write(X), nl, halt.

激活此 prolog/python 组合并将结果写入输出流

$ swipl -g do c:\hello.pl
hello world: foo,bar

这是你想要的吗?

【讨论】:

  • 我知道你做了什么...如果我有成百上千个调用,这会不会太慢...这可以用于多个调用而无需关闭 python 进程吗?
  • 您要求一种方法在两个系统之间进行通信。这是一种解决方案,您理解它。您的下一个问题涉及设计一个有效的解决方案架构。是的,有一些解决方案,但它们的价值可能超过论坛中的几行代码......
  • 关于高性能,一种方法是将 Spacy-NLP 作为 Python Web 服务运行。然后 Swi-prolog 客户端可以发布请求并检索答案。
  • 我在想Swi是否可以做IPC!
  • 确实如此! cfswi-prolog.org/pldoc/doc_for?object=section(%27packages/…有一些发送和接收消息的代码示例!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-02
  • 2010-10-24
  • 1970-01-01
相关资源
最近更新 更多