【问题标题】:Process creation in python Windows with console使用控制台在 python Windows 中创建进程
【发布时间】:2015-09-03 20:08:15
【问题描述】:

我在 python 中有一个带参数的函数。在同一个文件中,我调用了该函数(称之为 foo)。 python(for Win7) 中是否有任何方法可以从父进程创建不同的独立进程,每个进程使用不同的参数集执行 foo (显然也独立于父进程)? 控制台也可以附加到这些进程吗?

PS:我知道如果它是一个单独的脚本或 exe,那么我们可以使用 Popen.subprocess() 模块。但这里的问题是将函数(代码)分配给不同的进程(彼此独立以及父进程)。

这就是函数。

import subprocess
import os
import string
def add(x,y):
     return x+y

这是输入文件:

1 2
3 4
5 6

现在,如果函数被编写在某个单独的文件(add.py)中,我们可以直接使用 subprocess.Popen() 为输入文件中的每组参数调用“add.py”。但是,如果函数与主文件写在同一个文件中,那么如何为显示的输入文件中的每组参数分配一个新进程? 我不能使用 fork(),因为没有适用于 Windows 的。

【问题讨论】:

  • @Sam 但我正在读取一个文件(一个循环)并为每组 args 每次创建一个新进程。此外,它们应该独立于父进程,并且应该有一个单独的控制台。跨度>
  • 为什么不在一个线程中运行每个函数调用? - 为什么需要一个单独的过程? - 如果您希望每个线程都有一个窗口,就像监视器一样,请考虑像 tKinter 这样的简单 GUI,并在创建新线程时添加一个文本框..
  • @Henrik 线程将依赖于父进程。我需要该函数处于无限循环中。

标签: python process


【解决方案1】:

是的,你可以。 我自己不会选择这条路,但这是可能的。 这有时被称为分离进程或守护进程。

存在更好的守护进程实现,但基本思想可以通过以下方式实现:

import subprocess
import sys

print "runMe started"
print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)

def runMeAsChild(args):
    if args is None or len(args) == 0:
        args = []
        args.append("stop")
    cmd = "start cmd /k python " + sys.argv[0]+ " " + " ".join(args)
    proc = subprocess.Popen(cmd, shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)

if len(sys.argv) == 1:
    runMeAsChild(["test"])
    runMeAsChild(["once", "again"])

如果您希望控制台在执行后自动关闭,请在 cmd 字符串中使用 /c 而不是 /k

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2012-10-26
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多