Python 线程返回值

标签 python multithreading return

我是线程的新手,我有现有的应用程序,我想使用线程使速度更快一些。

我有几个返回主 Dict 的函数,并希望将它们发送到单独的线程,以便同时运行而不是一次运行一个。

我做了一些谷歌搜索,但我似乎找不到适合我现有代码并且需要一些帮助的东西。

我有大约六个函数返回主 Dict,如下所示:

parsed['cryptomaps'] = pipes.ConfigParse.crypto(parsed['split-config'], parsed['asax'], parsed['names'])

这里的问题在于返回值。我知道我需要为此使用一个队列,但是我需要为这六个函数中的每一个函数一个队列,还是为所有这些函数一个队列。如果是后者,我将如何将返回与线程分开并将其分配给正确的字典条目。

对此的任何帮助都会很棒。

约翰

最佳答案

您可以将(工作人员、数据)的元组推送到队列中以识别源。 另请注意,由于全局解释器锁,Python 线程并不是很有用。我建议看一下多处理模块,它提供的接口(interface)与多线程非常相似,但实际上会随着工作线程的数量而扩展。

编辑:

代码示例。

import multiprocessing as mp

# py 3 compatibility
try:
    from future_builtins import range, map
except ImportError:
    pass


data = [
    # input data
    # {split_config: ... }
]

def crypto(split_config, asax, names):
    # your code here
    pass

if __name__ == "__main__":
    terminate = mp.Event()
    input = mp.Queue()
    output = mp.Queue()


    def worker(id, terminate, input, output):
        # use event here to graciously exit
        # using Process.terminate would leave queues
        # in undefined state
        while not terminate.is_set():
            try:
                x = input.get(True, timeout=1000)
                output.put((id, crypto(**x)))
            except Queue.Empty:
                pass

    workers = [mp.Process(target=worker, args=(i, )) for i in range(0, mp.cpu_count())]
    for worker in workers:
        worker.start()

    for x in data:
        input.put(x)

    # terminate workers
    terminate.set()

    # process results
    # make sure that queues are emptied otherwise Process.join can deadlock

    for worker in workers:
        worker.join()

关于Python 线程返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26688011/

相关文章:

python - 编写 python 库 : structure, 命名和导入最佳实践

c++ - 与串行版本相比,使用openMP进行插入排序的并行化可提供非常醒目的结果

c# - Windows窗体的线程问题

javascript - 返回语句未在数组中提供正确数量的过滤类(class)

ruby-on-rails - pluck()/select() 的 Rails 逆

Python opencv + flask ,VideoCamera打开但不显示视频源

python - 卷积网络 : Not getting the required output in the max pooling function

python - 有没有办法将列表插入到 python 中的 .format 方法中?

c - 为用户空间线程库编写调度程序

redirect - Yii2 返回 $this->goBack() 不工作