使用 os.popen() 或子进程来执行函数



我目前正在研究线程、多进程和操作系统文档,以改进我的程序结构。然而,老实说,其中一些很复杂,我无法让它在我的程序上实现,要么它由于堆栈溢出而崩溃,要么得到错误的输出或根本没有输出。所以这是我的问题。

假设我有一个传递给函数的名称列表,并且该函数是我想在另一个控制台中运行的函数 - 当然是python解释器。 并让它在整个周期中运行。

假设我有这个:

def execute_function(name, arg1, arg2):
While True:
#do something
for name in names:
execute_function(name, arg1, arg2)

我应该使用什么来运行这个函数以编程方式在 Python 上打开另一个控制台并在那里运行它While True:它是子进程/多进程/线程还是os.popen()

在这个例子中,我应该如何执行?多处理池和进程总是与我一起崩溃。所以我认为这不是正确的解决方案。到目前为止,我还没有看到线程和子进程与函数一起使用的示例。有解决方法吗?或者也许是我可能错过的简单解决方案?谢谢。

编辑:

类似的代码:

if symbols is not None and symbols1 is not None:
symbols = [x for x in symbols if x is not None]
symbols1 = [x for x in symbols1 if x is not None]
if symbol != None and symbol in symbols and symbol in symbols1:
with Pool(len(exchanges)) as p:
p.map(bot_algorithm, (a, b, symbol, expent,amount))

http://prntscr.com/j4viat - 错误是什么样子的

subprocess通常总是优先于os.system()

这些文档包含许多示例 - 在您的情况下,如果您想查看命令的结果,您的execute_function()函数可能希望使用subprocess.check_output()

例如:

def execute_function(name, arg1, arg2):
output = subprocess.check_output(["echo", name])
print(output)

不过,所有这些都是启动一个新进程,并等待它返回。虽然这在技术上是两个进程,但它并不完全是你所说的多线程。

若要使用同步运行多个子进程,可以对多处理库执行以下操作:

from multiprocessing.dummy import Pool
def execute_function(name, arg1, arg2):
return subprocess.check_output(["echo", name])
names = ["alex", "bob", "chrissy"]
pool = Pool()
map_results = pool.map(execute_function, names)

这会将迭代器(名称列表)映射到函数 (execute_function) 并一次运行它们。好吧,您的机器一次拥有的内核数量就有多少。map_results 是来自execute_function函数的返回值的列表。

相关内容

  • 没有找到相关文章

最新更新