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