我们可以从python启动并行shell命令吗?

我们可以从python启动并行shell命令吗?,python,shell,parallel-processing,Python,Shell,Parallel Processing,我想使用go可执行文件:将数据从csv文件插入数据库。但是,我计划使用Python读取文件名,并查找适当的表名进行插入。如果我随后启动timescaledb parallel copy作为一个Python子进程在shell上执行,它仍然是并行的吗?我不需要Python使其并行,默认情况下它是并行的。我只是不希望Python使其成为单线程。如果您使用的是subprocess.run(),那么您的程序,timescaledb parallel copy将像从shell调用它一样执行。它仍将是平行的。

我想使用
go
可执行文件:将数据从csv文件插入数据库。但是,我计划使用Python读取文件名,并查找适当的表名进行插入。如果我随后启动
timescaledb parallel copy
作为一个Python子进程在shell上执行,它仍然是并行的吗?我不需要Python使其并行,默认情况下它是并行的。我只是不希望Python使其成为单线程。

如果您使用的是
subprocess.run()
,那么您的程序,
timescaledb parallel copy
将像从shell调用它一样执行。它仍将是平行的。python脚本将不会返回,并将等待
timescaledb parallel copy
返回。

是的,我相信它会返回。通过将程序作为子进程启动,您可以像最初一样运行程序,而不会受到python的干扰

Python如何实现单线程?GIL是Python解释器的内部属性。子流程跨越流程边界;它们完全不受影响。(我也不会将go可执行文件称为“shell命令”;如果你做得对,使用
shell=False
,任何地方都不会涉及shell,只有Python解释器
fork()
本身和
execve()
ing Go程序——即使你做得不对,并且使用
shell=True
,Python解释器
fork()
s和
exec()
s的shell就是
fork()
ing自身的一个副本,并使用
execve()
用Go可执行文件的进程映像替换该副本)。我能够测试子流程是否可以并行运行。