关于这个惊人的answers和this blogpost,我还有一个小问题。也就是说,博客文章从基准测试中表明,由于GIL,线程将比没有线程更慢:
simple threading multiprocessing
threads = 2 4.124 5.539 2.034
threads = 3 6.391 13.772 3.376
threads = 4 9.194 17.641 4.720
因此线程甚至比简单执行慢。这是理解的 从上面讨论的GIL的行为,不应该让我们感到惊讶 现在
我以与帖子相同的方式对我自己的函数进行基准测试(将数据写入并将其写入文件)。我有以下结果:
simple 15 mins, threading: 10 mins, multiprocessing 5 mins.
那么,为什么线程比没有任何线程的简单方法更快?
编辑: 功能的小描述
for thread in range(4):
process = multiprocessing .Process(name=str(thread), target=perform_extraction, args=(ranging[thread],))
#process = Thread(name=str(thread), target=perform_extraction, args=(ranging[thread],))
process.start()
processes.append(process)
for process in processes:
process.join()
def perform_extraction(ranges):
thread_name = multiprocessing.current_process().name
#thread_name = currentThread().getName()
for page in ranges:
data = extract_data(page)
write_data(data, thread_name+'.txt')