如何解决在python中的多线程中,如何产生结果并返回线程值?
运行此代码,我得到以下日志,而不是future
值,而是线程对象。产生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>
...
Y:
[<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()将结果存储在类或类实例变量中; 2-使用current.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())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。