sách gpt4 ăn đã đi

Làm thế nào để xâu chuỗi tương lai một cách không bị cản trở? Tức là làm thế nào để sử dụng một tương lai làm đầu vào cho một tương lai khác mà không bị chặn?

In lại 作者:太空狗 更新时间:2023-10-29 20:28:57 33 4
mua khóa gpt4 giày nike

使用下面的示例,future2 如何在 future1 完成后使用 future1 的结果(不阻塞 future3 从被提交)?

from concurrent.futures import ProcessPoolExecutor
thời gian nhập khẩu

def wait(seconds):
time.sleep(seconds)
return seconds

pool = ProcessPoolExecutor()

s = time.time()
future1 = pool.submit(wait, 5)
future2 = pool.submit(wait, future1.result())
future3 = pool.submit(wait, 10)

time_taken = time.time() - s
print(time_taken)

câu trả lời hay nhất

这可以通过精心设计回调以在第一个操作完成后提交第二个操作来实现。遗憾的是,不可能将任意 future 传递给 pool.submit,因此需要一个额外的步骤将两个 future 绑定(bind)在一起。

这是一个可能的实现:

import concurrent.futures

def copy_future_state(source, destination):
if source.cancelled():
destination.cancel()
if not destination.set_running_or_notify_cancel():
trở lại
exception = source.exception()
if exception is not None:
destination.set_exception(exception)
khác:
result = source.result()
destination.set_result(result)


def chain(pool, future, fn):
result = concurrent.futures.Future()

def callback(_):
thử:
temp = pool.submit(fn, future.result())
copy = lambda _: copy_future_state(temp, result)
temp.add_done_callback(copy)
except:
result.cancel()
nâng lên

future.add_done_callback(callback)
return result

Xin lưu ý rằngcopy_future_state Đúng asyncio.futures._set_concurrent_future_state 的略微修改版本.

cách sử dụng:

from concurrent.futures import ProcessPoolExecutor

def wait(seconds):
time.sleep(seconds)
return seconds

pool = ProcessPoolExecutor()
future1 = pool.submit(wait, 5)
future2 = chain(pool, future1, wait)
future3 = pool.submit(wait, 10)

关于python - 如何以非阻塞方式链接 future ?即,如何在不阻塞的情况下将一个 future 作为另一个 future 的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45922846/

33 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress