gpt4 book ai didi

python - 打破 python 多处理管理器列表

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:32 26 4
gpt4 key购买 nike

我正在执行一个流程,我想在 Manager.list() 达到一定数量时停止它,我该怎么做?

我的代码在这里,它不只是工作,有人可以帮忙吗?我不想使用线程。

from multiprocessing import current_process, cpu_count
from multiprocessing import Pool, Manager
import sys

# noinspection PyBroadException
def pool_process(value, _results):
"""
Spreading work across a pool of Python Processes
:param value: to be worked on
:param _results: the array that holds them
"""
try:
_results.append(value)
except:
print "FATAL: %s running pool_process(%s, %s) exited with %s" % \
(current_process().name, value, _results, sys.exc_info())


if __name__ == '__main__':
pool = Pool(processes=cpu_count() * 2)
pool_mgr = Manager()
results = pool_mgr.list()

for each in xrange(0, 1000):
pool.apply_async(pool_process, [each, results])

check = True

while check:
if len(pool_mgr.list()) == 100:
check = False
pool.close()
pool.join()
print len(pool_mgr)

最佳答案

我建议您尝试两件事:

if len(results) >= 100:

try:
if len(_results) < 100:
_results.append(value)
except:

问题是您正在并行处理。所以这些交易可能会发生:

if len(results) == 100: # 99
_results.append(value)
_results.append(value)
if len(results) == 100: # 101

您不仅希望在 100 处停止,而且您不希望超过 100 的值。因此您应该使用 >= 符号。

关于python - 打破 python 多处理管理器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21736041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com