Python:组织这个线程的最佳方式是什么?
我想知道在我的代码中组织线程的最佳方式是什么。这是我在线程中调用的函数的一个示例:Python:组织这个线程的最佳方式是什么?,python,python-3.x,multithreading,Python,Python 3.x,Multithreading,我想知道在我的代码中组织线程的最佳方式是什么。这是我在线程中调用的函数的一个示例: def func(param1, param2, **kwargs): r = requests.get(param1 + param2) ... do something ... if "queue" in kwargs and isinstance(kwargs["queue"], queue.Queue): kwargs[&qu
def func(param1, param2, **kwargs):
r = requests.get(param1 + param2)
... do something ...
if "queue" in kwargs and isinstance(kwargs["queue"], queue.Queue):
kwargs["queue"].put(r)
else:
return r
然后在此处调用此函数:
def thread_func(list_):
q = queue.Queue()
for item in list_:
t = threading.Thread(target = func1, args = (item[0], item[1],), kwargs = {"queue" : q})
t.start()
t.join()
return q
函数func也可以在线程外部(对于单个请求)或线程内部调用,因此我认为如果在线程内部调用队列,并且如果传递了队列,则在kwargs中传递队列,而不是返回结果,将其放入队列中
我还读到我可能会使用一个池来做这件事,但我不知道我需要多少线程
执行速度对我来说很重要,我想知道,您是否认为有办法改进当前代码
例如,我认为最好将func返回的值直接插入到列表中,而不是稍后通过循环队列将其放入列表中,但是我认为队列是存储线程结果的首选对象,因此不确定这是否是一种好的做法
提前感谢我将使用两个单独的函数,其中包装器使用普通版本。大概是这样的:
def normal_func(param1, param2):
r = requests.get(param1 + param2)
... do something ...
return r
def thread_func(param1, param2, queue):
queue.put(normal_func(param1, param2)) # Use the bare-bones version
然后在需要“正常”行为时使用第一个版本,在多线程时使用第二个版本:
t = threading.Thread(target=thread_func, args=(item[0], item[1], q))
试图在一个函数中结合根本不同的行为是混乱的