Inb*_*ose 4 python queue multithreading
我想要做的是能够调用多个线程的函数并获得他们的结果.
我有以下代码:
(这是一个例子,实际代码不是简单地将str转换为int)
from threading import Thread
import time
import Queue
#an example - actual code connects to a server
def str_to_int(arg, queue):
result = 0
result = int(arg)
#sleep to check that they happen at once.
time.sleep(10)
queue.put(result)
def combine():
q1 = Queue.Queue()
q2 = Queue.Queue()
q3 = Queue.Queue()
t1 = Thread(target = str_to_int, args=("111", q1))
t2 = Thread(target = str_to_int, args=("222", q2))
t3 = Thread(target = str_to_int, args=("333", q3))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
return (q1.get(),q2.get(),q3.get())
print combine()
Run Code Online (Sandbox Code Playgroud)
这段代码有效.我得到了预期的结果:
>>>
(111, 222, 333)
Run Code Online (Sandbox Code Playgroud)
但是,必须有更好的方法来做到这一点.我计划拥有比3更多的线程,但即使我只留在3 - 它似乎非常难看.
编辑:我需要能够知道哪个结果来自哪个线程(即:我从哪个参数/参数给出了函数)
以下是一些建议:
Queue是线程安全的,所以使用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))]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8011 次 |
| 最近记录: |