使用元组的 Python 多处理不起作用



我正在尝试在Python 3中进行多处理,但我遇到了一些奇怪的行为(好吧,至少这对我来说很奇怪!

本质上,我创建了一个包含 10 个随机数的列表。然后,我循环访问一个范围(在我的示例中,它是 2(,对于每次迭代,我使用pool.apply_async并行处理随机数。"处理"的结果存储在列表中,以便在所有处理完成后,我可以打印结果。我希望看到 2*10 的结果。

然而,我发现,由于某种原因,我只看到 2 个结果(即我第一个循环中的 2 次迭代(:

import multiprocessing
import time
import random
class Calculator:
def calculate(self, links):
print("LENGHT:", len(links)) # 48
tups=[]
for datasetlink in links:
print(datasetlink)
tups.append("GO", datasetlink)
return tups
dslinks = random.sample(range(1, 101), 10)
result_list = []
def Process(datasetlinks):
calc = Calculator();
tups = calc.calculate(datasetlinks)
return tups;
def log_result(result):
result_list.append(result)
def apply_async_with_callback():
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
for i in range(2):
pool.apply_async(Process, args = (dslinks,), callback = log_result)
pool.close()
pool.join()
DoPrintResults()
def DoPrintResults():
for result in result_list:
print(result)
if __name__ == '__main__':
start = time.time()
apply_async_with_callback()
end = time.time()
print("Execution took: ", (end-start), " seconds")

如果我从Calculator.calculate功能中删除tups=[]tups.append("GO", datasetlink)return tups,一切都按预期工作,我看到Calculator.calculatefor-loop被击中了 20 次。

我做错了什么?

问题是这一行:

tups.append("GO", datasetlink)

将其更改为:

tups.append(datasetlink)

调试多进程代码可能很棘手。调试它的一种方法是使用异常。将所有内容放在Processtry块中:

def Process(datasetlinks):
try:
calc = Calculator();
tups = calc.calculate(datasetlinks)
except:
print(sys.exc_info()[0])
return tups;

这给了我<type 'exceptions.NameError'>,当我移动 try 块进行计算时:

def calculate(self, links):
try:
print("LENGHT:", len(links)) # 48                                                                      
tups=[]
for datasetlink in links:
print(datasetlink)
tups.append("GO", datasetlink)
except:
print(sys.exc_info()[0])
return tups

我反而得到了<type 'exceptions.TypeError'>

相关内容

  • 没有找到相关文章

最新更新