Python 从多个线程获得结果的更好方法
我想做的是能够调用具有多个线程的函数并获得它们的结果 我有以下代码: (这是一个示例,实际代码并不简单地将str转换为int) 这个代码有效。我得到了预期的结果:Python 从多个线程获得结果的更好方法,python,multithreading,queue,Python,Multithreading,Queue,我想做的是能够调用具有多个线程的函数并获得它们的结果 我有以下代码: (这是一个示例,实际代码并不简单地将str转换为int) 这个代码有效。我得到了预期的结果: >>> (111, 222, 333) 然而,必须有更好的方法来做到这一点。 我计划有更多的线程比3,但即使我只是停留在3-它似乎非常丑陋 编辑:我需要知道哪个结果来自哪个线程(即:我给出函数的参数/参数)以下是一些建议: 队列是线程安全的,因此使用1个队列传递结果 您可以在一个周期中创建所有线程,并使用队列传递
>>>
(111, 222, 333)
然而,必须有更好的方法来做到这一点。
我计划有更多的线程比3,但即使我只是停留在3-它似乎非常丑陋
编辑:我需要知道哪个结果来自哪个线程(即:我给出函数的参数/参数)以下是一些建议:
队列
是线程安全的,因此使用1个队列传递结果def str_to_int(arg, queue):
result = int(arg)
queue.put({arg: result})
def combine():
arguments = ('111', '222', '333')
q = Queue.Queue()
threads = []
for argument in arguments:
t = Thread(target=str_to_int, args=(argument, q))
t.start()
threads.append(t)
for t in threads:
t.join()
return [q.get() for _ in xrange(len(arguments))]
我需要能够知道哪个结果来自哪个线程(即:我给函数的参数/参数)
我使用这样的函数来跟踪哪个结果来自哪个任务:
从线程导入线程
导入键入
def一起运行(任务:typing.Dict[typing.Hashable,tuple],
除了错误:tuple=None)->dict:
"""
:param tasks:与可调用的元组及其参数匹配的任务键的dict
其中:
{'result:0':1,'result:1':2,'result:2':3,'result:3':4}
您可能需要移动t.join()按钮,进入自己的循环,否则线程将连续运行。这不起作用。正如@AustinPhillips所说,线程彼此紧跟而不是同时运行。是的,我的错误,线程必须在单独的循环中加入,因为加入会导致主线程阻塞。嗯-抱歉,我将其标记为已接受,但后来我意识到这会导致问题m代表我。我现在如何获得不同的结果,并能够知道我正在处理哪一个?您不仅可以将结果放入队列,还可以将指向参数的内容放入队列。将({argument:resut})放入您的worker函数。我已使用修改的str_to_int函数更新了post
def str_to_int(arg, queue):
result = int(arg)
queue.put({arg: result})
def combine():
arguments = ('111', '222', '333')
q = Queue.Queue()
threads = []
for argument in arguments:
t = Thread(target=str_to_int, args=(argument, q))
t.start()
threads.append(t)
for t in threads:
t.join()
return [q.get() for _ in xrange(len(arguments))]