关于将C#代码与Django后端集成的建议

-2 投票
1 回答
43 浏览
提问于 2025-04-13 01:51

我用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()

撰写回答