请教一个 Java 获得 Python 执行结果的方法

2017-04-13 23:43:45 +08:00
 backfrw
前段时间交了毕业设计的开题报告,本来打算就 java 写个网站,老师说不行,太简单,改报告。。。
最后是 python 写爬虫,通过关键字爬取信息,存数据库,用 java 的 SSM 框架写个后台,从数据库获得关键字相关的信息展示在页面上,之前想的是关键字通过 java 存数据库, python 从数据库拿关键字爬网站,算是通过开题报告了

等真正开始写才觉得不对,主要流程上 java 怎么在 python 结束后运行,就把自己想死机了。。。。

长期潜水看 V2EX 学姿势,大佬们能不能讲讲怎么开发比较容易啊?
目前是 python 小白,正在一边看教程一边写
6952 次点击
所在节点    Java
42 条回复
pierre1994
2017-04-13 23:45:46 +08:00
rpc
backfrw
2017-04-13 23:57:34 +08:00
@pierre1994 好的,我去研究,谢谢大佬
ChasYuan
2017-04-14 00:14:49 +08:00
感觉楼主和我毕设差不多啊。不会一个专业吧。。我都是用 Java 实现的
backfrw
2017-04-14 00:17:32 +08:00
@ChasYuan 网络工程,,,应该不是一个专业吧
casparchen
2017-04-14 00:57:58 +08:00
java 不该从数据库读数据么,应该和 python 没关系吧
backfrw
2017-04-14 01:16:48 +08:00
@casparchen 但是没有 java 存的关键字, python 不知道爬什么,没有 python 爬的数据, java 不知道展示什么,似乎陷入了循环
casparchen
2017-04-14 01:36:49 +08:00
@backfrw python 每隔 10 秒读一下数据库?
Lpl
2017-04-14 02:47:21 +08:00
写一个 webhook , java 出现存储关键字的操作后,通过 hook 通知 python 关键字更新了
NoAnyLove
2017-04-14 03:01:16 +08:00
以前看过一种设计,为了尽量的解耦合,不同部分都是通过数据库进行数据交换,所以每个部分都要周期性地读取数据库,如果有了数据就执行,没有就继续睡大觉。好处是实现简单,而且各部分没有很强的依赖关系。虽然获取数据会有一定延迟,不过应该能满足需求。

此外,也许可以试试 Pyro , Python 端提供远程对象调用,同时又 Java 和.net 端接口。我没用过,但是感觉应该能满足你的需求 https://pythonhosted.org/Pyro4/pyrolite.html
Lpl
2017-04-14 03:05:06 +08:00
忘了说了,不建议你去用 rpc ,用 rpc 还得考虑协议、序列化的东西。对于你要实现的东西来说太重,并且没有意义。市面上比较常见的与语言无关的 rpc 框架是 gRPC 。

大概跟你讲下,你使用 java 写个简单的存储操作,有个 web 端的界面,存储操作简称“操作 A ”。你用 Python 写个 post 类型的接口,这个接口简称“接口 B ”。

当你发生操作 A 的时候,向接口 B 发送 POST 请求,这个请求的数据可以是你新增的标签。如果 B 接收到请求,那么就开始爬网站,然后写入数据库。有了数据后, Java 自然就可以拿数据出来做展示。这就相当于一个简单的钩子
Lpl
2017-04-14 03:07:37 +08:00
这样子做的话能解耦,比如说:你有多台爬虫机,那么就会有多个接口。你可以把接口在 java 端写活,比如存储进数据库。当你 java 发生存储操作的时候,就向数据库中的这些接口发送请求。

嗯,这样子也有利于你的功能扩展
Cbdy
2017-04-14 08:17:13 +08:00
java 在 python 结束后运行?
python pyapp.py | java -jar japp.jar

或者起一个 Java 主进程,当需要爬东西的时候由这个进程 fork 一个 python 进程跑爬虫, java 阻塞直到 python 进程返回,有兴趣的话还可以研究一下 jython
wwqgtxx
2017-04-14 08:27:01 +08:00
消息交互用 rabbitmq 来交互不就行了
louzhumuyou
2017-04-14 08:41:03 +08:00
@Lpl 同样推荐 webhook 。👍
arischow
2017-04-14 08:43:48 +08:00
redis
zwl2012
2017-04-14 09:08:14 +08:00
为什么不统一语言呢? JAVA 也可以做爬虫呀
hand515
2017-04-14 09:32:52 +08:00
数据库生成一个任务记录, python 完成后更新状态, java 轮询状态,这不就很简单了吗。
数据库改为 redis 效率更高, 还可以通过 pub/sub 实时通知
kimchan
2017-04-14 09:34:50 +08:00
本来就是两个独立服务. 用接口不是很简单吗?
blackFool
2017-04-14 09:48:42 +08:00
kafka
domty
2017-04-14 09:54:29 +08:00
没考虑过用消息队列解耦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354732

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX