关于将C#代码与Django后端集成的建议
我用C#来把文件(比如pdf、docx等)转换成其他格式(比如docx、xls、ppt等),而我的后台是用Python(django)写的。
我成功地写了一个C#的dll,并且能在Python中调用它的功能,直接进行文件转换,使用的是pythonnet clr。
不过问题是,这个过程很慢,慢得有点离谱(我觉得大概慢了20倍),比起直接把代码编译成可执行文件来运行要慢很多。
所以我需要一些建议,我是应该把C#代码做成一个可执行文件,然后通过子进程调用它,并传入文件路径参数(这样我就得先把文件写到磁盘上,再调用子进程,子进程会读取这个文件,然后再写回去,最后Python会读取输出文件并删除它)?还是有其他更好的办法呢?
用dll的方案我只需要把文件的字节传给dll,不用把文件写到磁盘上,这对我来说是更好的选择,但如果速度差距这么大,那就不太划算了。
我觉得把整个文件内容(字节)作为参数传给子进程在内存方面可能不是个好主意,还有其他原因。
任何建议都非常欢迎!
1 个回答
0
如果这个可执行文件运行得更快,那听起来是个不错的主意。
你可以修改你的C#可执行文件,让它从标准输入流中读取输入,然后用Python来写入数据:
import shutil
import subprocess
proc = subprocess.Popen(
["my-software"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
with open("my_document.pdf", "rb") as pdf:
shutil.copyfileobj(pdf, proc.stdin, length=131072)
proc.stdin.close()
# read the output
stdout, stderr = proc.communicate()