如何从线程函数中获取多个返回值?



调用了一个返回多个值的外部函数。

def get_name(full_name):
# you code
return first_name, last_name

在简单的函数调用中,我可以得到结果。

from names import get_name
first, last= get_name(full_name)

但是我需要对调用使用线程来获取第一个和最后一个变量的结果值。我在使用简单的线程调用时失败了。

first, last= Threading.thread(get_name, args= (full_name,)

请帮我获取函数调用的返回值

您应该使用queue从线程中检索数据,这里有一个使用包装器将函数中的值存储到队列中的示例:

import threading
import queue
my_queue = queue.Queue()
def storeInQueue(f):
def wrapper(*args):
my_queue.put(f(*args))
return wrapper

@storeInQueue
def get_name(full_name):
return full_name, full_name

t = threading.Thread(target=get_name, args = ("foo", ))
t.start()
my_data = my_queue.get()
print(my_data)

这里有实时工作示例

您可以使用ThreadPool()pool.apply_async()test()返回多个值,如下所示:

from multiprocessing.pool import ThreadPool
def test(arg1, arg2):
return 'a', 1, arg1, arg2
pool = ThreadPool(processes=1) # Here
result = pool.apply_async(test, ('b', 2)) # Here
print(result.get()) # ('a', 1, 'b', 2)

并且,您还可以使用concurrent.futures.ThreadPoolExecutor()submit()test()返回多个值,如下所示:

from concurrent.futures import ThreadPoolExecutor
def test(arg1, arg2):
return 'a', 1, arg1, arg2
with ThreadPoolExecutor() as executor: # Here
future = executor.submit(test, 'b', 2) # Here
print(future.result()) # ('a', 1, 'b', 2)

相关内容

  • 没有找到相关文章

最新更新