主函数代码
main代码的总结
server_use函数
首先要讲清楚server_use
的使用情况,因为我们的python文件全部部署在服务器上的,所以在很多情况下我们要用java直接调用我们的主函数,但是由于主函数有很多参数需要进一步的修改,所以需要传入一个字符串,然后由python解析,提取自己所需要的参数。
说实话,一开始这样写觉得还行,后来感觉其实写的有点问题,我认为python和后端的连接总共可以给出三种方式
- 用java调一个python的主函数。所有的参数都传到这个主函数里面,一方面,接口比较简单那,但是相当于把java对参数的处理转移给了python端
- 用java分别调用不同的python函数文件。这样能够让每个python文件各取所需,不仅能够比较方便的处理和完成任务,而且也利于函数文件之间的耦合性,不过缺点就是java要处理的数据量大大增加了。
- 直接用python写后端,从此再无命令行调用(笑)。
综上,由于我们的后端较为繁忙,可能没有太多时间处理我们这个项目,所以,我们一开始就采用了1方案,但是在写的过程中,函数量以及参数大大增加了我们python端的负担,后来我们借鉴了一些其他server的搭建,发现2也是很好用的模式。总的来说,应该大大的方向改用2,小的细致末节用1,这样可以一方面增加程序的利用率,同时让程序变得更加健壮和可靠。
def server_use():
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
model_all = ["DNN", "RNN", "LSTM", "BiLSTM", "LSTMAttention", "GRU", "TextCNN", "TextRCNN", "VDCNN", "RNN_CNN",
"TransformerEncoder", "Reformer_Encoder", "Performer_Encoder", "Linformer_Encoder",
"RoutingTransformer_Encoder", "6mer_DNAbert", "prot_bert", "TextGCN"]
para_all = ["CDHit", "Focalloss", "adversialtraining"]
CDHit_all = [0.8, 0.6, 0.4]
# Focalloss_all = [0, 1]
# adversialtraining_all = [0,1]
# RNA_model = ["TransformerEncoder", "TextCNN", "LSTM", "GCN"]
# prot_model = ["prot_bert", "TransformerEncoder", "TextCNN", "LSTM", "GCN"]
首先我们先确立一些基本使用的参数量,如model_all
模型使用的名字,para_all
要比较参数的选项,CDHit_all
CD-Hit要用到的参数选项。
注意到这里我们统一编码了所有模型的名称,一开始我们想要分别编码的,但是考虑到代码的参数量和循环判断要进一步缩减,所以我们还是补上了统一编码的方式。
requests_url = "http://server.wei-group.net/biology/job/status/update"
os.chdir("/home/weilab/molecular_analysis_server/biology_python/main")
# print(sys.argv[2])
# print(type(sys.argv[2]))
setting