Python同时进行多处理和多线程

2024-04-28 06:45:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个任务需要我花很多时间来处理,因为我必须通过两个非常大的循环来运行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>

我不明白这个错误背后的原因。如果我在最后一个循环中使用多线程,它可以正常工作,但是我想看看多线程处理是否会使它更快。如果您能帮我解决这个问题,我将不胜感激


Tags: infortimeas错误counter时间range