[英]How can I yield notifications and return a result from a function? (Python)
[英]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.