簡體   English   中英

python多線程中,如何yield for result和返回線程值?

[英]In multithreading in python, how to yield for result and return thread value?

運行此代碼,我得到以下日志,而不是future值,我得到線程 object。產生f的結果並最終返回帶值的Y的正確方法是什么?

Y = []
process_pool = ThreadPoolExecutor(4)
f = partial(some_func, *args)
for i in range(1000):
    future = process_pool.submit( f ,i)
    print(future)
    Y.append(future)
return Y 

日志:

<Future at 0x7f82c8ebf390 state=running>
<Future at 0x7f82cb636f10 state=running>
<Future at 0x7f82cb0af090 state=running>
<Future at 0x7f82cb0af190 state=running>
<Future at 0x7f82cb0af350 state=pending>
<Future at 0x7f82cb0ae350 state=pending>
...

是:

[<Future at 0x7f82c8ebf390 state=finished raised NameError>, <Future at 0x7f82cb636f10 state=finished raised NameError>, <Future at 0x7f82cb0af090 state=finished raised NameError>, <Future at 0x7f82cb0af190 state=finished raised NameError>, <Future at 0x7f82cb0af350 state=finished raised NameError>, <Future at 0x7f82cb0ae350 state=finished raised NameError>, <Future at 0x7f82cb0ae290 state=running>, <Future at 0x7f82cb0aea10 state=finished raised NameError>, <Future at 0x7f82cb0ae950 state=running>,...]

兩種簡單的方法是:1-讓您的 f() 將結果存儲在 class 或 class 實例變量中; 2- 使用 concurrent.futures.as_completed()

import concurrent.futures

Y = []
l_tasks = [] 
with concurrent.futures.ThreadPoolExecutor() as executor:
    for i in range(1000):
        l_tasks.append(executor.submit(f, i))
    for task in concurrent.futures.as_completed(l_tasks):
        Y.append(task.result())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM