Python 多处理进程在我调用 process.start() 时停止了我的 运行 代码
Python multiprocessing process just stops my code of running when i call process.start()
我正在尝试使用多处理使遗传算法并行运行候选对象。所以我做了这样的代码
import multiprocessing as mp
...
parents = []
queue = mp.Queue(maxsize=poolSize - 1)
processes = []
for _ in range(poolSize - 1):
processes.append(mp.Process(target=generate_parent, args=(queue,)))
for process in processes:
process.start()
for process in processes:
process.join()
for _ in range(poolSize - 1):
parents.append(queue.get())
出了点问题,我只是不知道是什么。当我尝试调试我看到的代码时,当它到达“process.start()”时,执行就停止了,就好像它已经到了“while True:继续”一样。当我尝试正常执行它时,也会发生同样的情况,代码在某个时候卡住,但它不会停止进程或引发任何错误。
我是多处理和一般并行性方面的新手,如果有人能帮助我,我会很高兴。
完整代码在这里:
https://github.com/estevaopbs/Molpro_tools
这个具体问题在 genetic.py 第 144 行。
(我知道代码中还有一些其他问题。我正在解决它,它们不应该影响这个特定问题。)
看起来问题就在这里(如果不是,那仍然是一个问题点):
def fn_generate_parent(queue=None):
while True:
try:
parent = Chromosome()
parent.Genes = create_lookup[random.choices(create_methods.methods, create_methods.rate)[0]]\
(first_molecule)
parent.Fitness = get_fitness(parent.Genes, fitness_param, threads_per_calculation)
break
except:
os.remove(f'data/{parent.Genes.__hash__()}.inp')
os.remove(f'data/{parent.Genes.__hash__()}.out')
os.remove(f'data/{parent.Genes.__hash__()}.xml')
continue
如果 try
块中存在异常 - 未声明的变量、未知方法、除以 0 - while True
继续作为静默无限循环。
问题是如果出现问题,代码不会采取任何纠正措施或停止,它只是安静地继续并可能不断遇到相同的错误。我会删除 continue
或至少用一些错误消息、日志记录或可能只重试几次的计数器来增加它。
我正在尝试使用多处理使遗传算法并行运行候选对象。所以我做了这样的代码
import multiprocessing as mp
...
parents = []
queue = mp.Queue(maxsize=poolSize - 1)
processes = []
for _ in range(poolSize - 1):
processes.append(mp.Process(target=generate_parent, args=(queue,)))
for process in processes:
process.start()
for process in processes:
process.join()
for _ in range(poolSize - 1):
parents.append(queue.get())
出了点问题,我只是不知道是什么。当我尝试调试我看到的代码时,当它到达“process.start()”时,执行就停止了,就好像它已经到了“while True:继续”一样。当我尝试正常执行它时,也会发生同样的情况,代码在某个时候卡住,但它不会停止进程或引发任何错误。
我是多处理和一般并行性方面的新手,如果有人能帮助我,我会很高兴。
完整代码在这里: https://github.com/estevaopbs/Molpro_tools
这个具体问题在 genetic.py 第 144 行。 (我知道代码中还有一些其他问题。我正在解决它,它们不应该影响这个特定问题。)
看起来问题就在这里(如果不是,那仍然是一个问题点):
def fn_generate_parent(queue=None):
while True:
try:
parent = Chromosome()
parent.Genes = create_lookup[random.choices(create_methods.methods, create_methods.rate)[0]]\
(first_molecule)
parent.Fitness = get_fitness(parent.Genes, fitness_param, threads_per_calculation)
break
except:
os.remove(f'data/{parent.Genes.__hash__()}.inp')
os.remove(f'data/{parent.Genes.__hash__()}.out')
os.remove(f'data/{parent.Genes.__hash__()}.xml')
continue
如果 try
块中存在异常 - 未声明的变量、未知方法、除以 0 - while True
继续作为静默无限循环。
问题是如果出现问题,代码不会采取任何纠正措施或停止,它只是安静地继续并可能不断遇到相同的错误。我会删除 continue
或至少用一些错误消息、日志记录或可能只重试几次的计数器来增加它。