使用不同的参数并行运行函数 - python

时间:2015-10-15 07:11:24

标签: python multithreading parallel-processing

我有一个函数slow_function,它需要大约200秒来处理job_title,它可以读取和写入全局变量。

使用此代码的性能没有任何改善。我错过了什么,然而这会返回相同的结果。

并行运行五个工作类别的代码:

    from threading import Thread
    threads = []

    start = time.time()
    for job_title in self.job_titles:
        t = Thread(target=self.slow_function, args=(job_title,))
        threads.append(t)
    # Start all threads
    for x in threads:
        x.start()

     # Wait for all of them to finish
    for x in threads:
        x.join()
    end = time.time()
    print "New time taken for all jobs:", end - start

2 个答案:

答案 0 :(得分:0)

您需要使用多处理(https://docs.python.org/2/library/multiprocessing.html)模块,因为线程模块受GIL(https://docs.python.org/2/glossary.html#term-global-interpreter-lock)的限制。

但是你不能使用全局变量来在生成的进程之间交换数据! ......见https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes

答案 1 :(得分:0)

您应该从类方法中提取slow_function,因为在进程之间共享本地上下文是不可能的。之后,您可以使用此代码:

socket.connect(xx);
socket.on('change', function(data) {
  alert('change happen!');
  $scope.data = data;
  $scope.$apply();
})
$scope.$watch('data', function() {
  if (change) {
    socket.emit('change', $scope.data);
  }
})