誰かが次のコードが正しく実行されない理由を理解できますか?以前のプロセスが終了すると新しいプロセスが生成されますが、このコードを実行すると自動的にすべてが実行されます。つまり、すべてのジョブレポートは終了していないときに終了し、ウィンドウも開いています。なぜis_alive()の考えは、実際には真である場合にfalseを返しますか?どのようにマルチプロセッシング(python)モジュールを間違って使用していますか?
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 ***')
:私も
cmd
定義(see docs)を変更しましたか? –これは本当にhttp://softwareengineering.stackexchange.com/またはhttp://codereview.stackexchange.com/に適した質問のようです。このような複雑なものに取り組むのを助けようとしている人々がもっといるかもしれません。スタックオーバーフローは、実際には特定のコードの問題を解決するためのものです。 –
コードレビューは、*コード*(ヘルプセンターに記載されているその他の条件が満たされている場合)にのみ適切です。これは頼まれているほど広すぎますが、CRのどちらにも適合しません。 –