在Java中调用Python函数:基于socket的方法

最近想写一个算法,考虑到执行效率和开发效率,准备使用Java来实现,不过在算法执行过程中我打算使用基于pytorch的神经网络,此时就涉及如何在Java语言中执行Python程序。

最简单的想法当然就是直接使用命令行调用:Runtime.getRuntime().exec("python xxx.py --yyy zzz"),但是这种方式每次调用python脚本都需要重启python解释器以及重新将pytorch神经网络加载进内存,如果调用频繁的话就会非常耗时,因此并不合适。

更好的方式是让两个程序通过网络来通信,python可以启动时加载好神经网络,之后就开一个socket服务等待请求,让java程序把参数通过socket发给python程序,然后python拿到参数后执行函数,再把返回值发送回java即可。python程序并不退出,因此就不需要重复神经网络的加载过程了。而且基于socket可以让java和python跑在不同的机器上。

Read More »

使用torchvision.datasets下载数据集时如何借助代理

比如使用pytorch下载数据集时:

trans = transforms.ToTensor()
mnist_train = torchvision.datasets.FashionMNIST(root="../data", train=True, transform=trans, download=True)
mnist_test = torchvision.datasets.FashionMNIST(root="../data", train=False, transform=trans, download=True)

如果直连网络状况不好,则下载会很慢,此时我们可以通过urllib模块配置代理:

Read More »

利用数字证书的通信过程

一、基础概念

1,对称加密算法:加密使用的密钥和解密使用的密钥是相同的。

2,非对称加密算法:加密使用的密钥和解密使用的密钥是不相同的。

3,公钥密码体制:一种非对称加密算法,它的公钥和私钥是不同的,也就是说加密使用的密钥和解密使用的密钥不同。它具有三个部分:公钥、私钥、加密解密算法。一般公钥和加密解密算法公开,而私钥保密。通过加密算法和公钥对明文进行加密,得到密文;通过解密算法和私钥对密文进行解密,得到明文。

Read More »

Git设置和取消代理

Git配置代理需要分两种情况:使用ssh仓库地址和使用https仓库地址,对于前者实际进行通信的软件为ssh,所以与git软件的配置无关。

一,如果仓库地址是ssh的,那么要编辑ssh配置文件。对于Linux,此文件的地址为:~/.ssh/config,对于Windows,此文件则位于:C:\Users\用户名\.ssh\config,若不存在请自行创建。并进行如下的编辑:

Host github.com *.github.com
    User git
    Port 22
    # http使用-H,socks使用-S
    ProxyCommand "D:\Development\PortableGit\mingw64\bin\connect" -S 127.0.0.1:10808 %h %p
Read More »