我有一个函数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
答案 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);
}
})