我有一个任务需要我花很多时间来处理,因为我必须通过两个非常大的循环来运行fat。我想多线程一个循环和多核以上的一个。不幸的是,出现了一个错误
def do_something(x,y):
time.sleep(1)
return x*y
上述函数I多线程如下所示:
def do_something_T(j):
with concurrent.futures.ThreadPoolExecutor() as tExecuter:
th = [tExecuter.submit(do_something, i, j) for i in range(50)]
for result in concurrent.futures.as_completed(th):
print(result.result())
当我像下面这样运行它时:
start = time.perf_counter()
for j in range(50):
do_something_T(j)
end = time.perf_counter()
print(end-start)
不幸的是,仍然有一个循环需要花费很多时间,因此我尝试按如下方式对该循环进行多重处理:
start = time.perf_counter()
with concurrent.futures.ProcessPoolExecutor() as pExecuter:
pr =[pExecuter.submit(do_something_T, j) for j in range(50)]
end = time.perf_counter()
print(end-start)
起初,我很惊讶它花费的时间如此之少,但什么也没有打印出来,所以当我检查其中一个流程时,我得到了以下错误:
pr[0]
<;0x21842211d90状态下的未来=已完成的已引发的BrokerProcessPool>
我不明白这个错误背后的原因。如果我在最后一个循环中使用多线程,它可以正常工作,但是我想看看多线程处理是否会使它更快。如果您能帮我解决这个问题,我将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐