我是如何错误地使用多处理(python)模块的?

我是如何错误地使用多处理(python)模块的?,python,Python,有人能帮我找出为什么下面的代码不能正常运行吗?我希望在前一个进程完成时生成新进程,但运行此代码会自动运行所有进程,即所有作业报告都已完成并在未完成时停止,并且它们的窗口也处于打开状态。有没有想过为什么当它实际为真时,is_alive()返回false import subprocess import sys import multiprocessing import time start_on = 33 #'!' end_on = 34 num_processors = 4; jobs = [

有人能帮我找出为什么下面的代码不能正常运行吗?我希望在前一个进程完成时生成新进程,但运行此代码会自动运行所有进程,即所有作业报告都已完成并在未完成时停止,并且它们的窗口也处于打开状态。有没有想过为什么当它实际为真时,is_alive()返回false

import subprocess
import sys
import multiprocessing
import time

start_on = 33 #'!'
end_on = 34
num_processors = 4;
jobs = []

def createInstance():
    global start_on, end_on, jobs
    cmd = "python scrape.py" + " " + str(start_on) + " " + str(end_on)
    print cmd
    p = multiprocessing.Process(target=processCreator(cmd))
    jobs.append(p)
    p.start()
    start_on += 1
    end_on += 1
    print "length of jobs is: " + str(len(jobs))

def processCreator(cmd):
    subprocess.Popen(cmd, creationflags=subprocess.CREATE_NEW_CONSOLE)

if __name__ == '__main__':
    num_processors = input("How many instances to run simultaneously?: ")
    for i in range(num_processors):
        createInstance()

    while len(jobs) > 0:
        jobs = [job for job in jobs if job.is_alive()]
        for i in range(num_processors - len(jobs)):
            createInstance()
        time.sleep(1)

    print('*** All jobs finished ***')

您的代码在每个
createInstance()
调用上生成了2个进程,我认为这会弄乱
is\u alive()
调用

p = multiprocessing.Process(target=processCreator(cmd))
这将产生一个进程来运行
processCreator(cmd)
。然后,
subprocess.Popen(cmd,creationflags=subprocess.CREATE\u NEW\u CONSOLE)
将生成一个子进程来运行该命令。此子进程将立即返回,因此父进程将立即返回

我认为这个版本可以工作,不再使用
多进程
。我还更改了
cmd
definition()


我没有读过你所有的问题,但是你看过多处理模块吗?这似乎是一个更适合or的问题。你可能会发现那里的人更愿意帮助解决像这样复杂的问题。堆栈溢出实际上只是为了获得有关特定代码问题的帮助。只有在有代码(并且满足帮助中心中给出的其他条件)的情况下,代码复查才是合适的。这对SO Asask来说太宽泛了,但也不适合CR。@CharlesDuffy我只建议进行代码审查,因为op说“我目前有一个python程序”,我在代码审查中要求使用代码,他们说返回这里lol。此外,完成工作可能会有问题。所有作业必须在1秒内结束才能退出while部分,否则,您将有一个很好的无限循环。
import subprocess
import sys
import time

start_on = 33 #'!'
end_on = 34
num_processors = 4;
jobs = []

def createInstance():
    global start_on, end_on, jobs
    cmd = ["python","scrape.py", str(start_on), str(end_on)]
    print(str(cmd))
    p = subprocess.Popen(cmd, creationflags=subprocess.CREATE_NEW_CONSOLE)
    jobs.append(p)
    p.start()
    start_on += 1
    end_on += 1
    print "length of jobs is: " + str(len(jobs))

if __name__ == '__main__':
    num_processors = input("How many instances to run simultaneously?: ")
    for i in range(num_processors):
        createInstance()

    while len(jobs) > 0:
        jobs = [job for job in jobs if job.poll() is None]
        for i in range(num_processors - len(jobs)):
            createInstance()
        time.sleep(1)

    print('*** All jobs finished ***')